pdo :: beginTransaction会锁定表吗?

时间:2012-05-27 11:32:45

标签: php pdo locking

我可以使用此功能代替'LOCK TABLES'查询吗?

示例:

pdo::beginTransaction(); 

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

pdo::commit();

1 个答案:

答案 0 :(得分:4)

答案是:这取决于。最重要的资源是帮助您准确理解它的作用,它不做什么以及它是如何工作的here

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

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

我不会详细了解哪些组合会起作用以及它们会做什么,因为我们在链接的文件中详细介绍了这些组合,我再也没有意识到这一点。