1

我可以使用这个函数代替“LOCK TABLES”查询吗?

例子:

pdo::beginTransaction(); 

    SELECT id AS last_id FROM t WHERE...
    INSERT INTO t (id,...) VALUES (last_id+1,....)

pdo::commit();
4

1 回答 1

4

答案是:视情况而定。帮助您准确了解它做什么、不做什么以及它是如何工作的最重要资源在这里

首先,这取决于底层驱动程序(MySQL、MSSQL 等)是否完全支持事务功能。如果驱动程序不支持事务,pdo::beginTransaction();将失败并返回FALSE,并且您的所有查询将立即执行。这并不是说LOCK TABLES查询会失败——这取决于底层数据库引擎是否支持它。

事实上,至少在 MySQL 中,遵循与语句pdo::beginTransaction()相同的规则。START TRANSACTION它不会立即锁定表,它只是确保作为事务一部分的查询遵循ACID的规则。

我不会详细说明哪些组合会起作用以及它们会做什么,因为它们在我链接到的文档中有详细介绍,而且我没有必要再把它们全部写出来。

于 2012-05-27T12:51:49.257 回答