我可以使用此功能代替'LOCK TABLES'查询吗?
示例:
pdo::beginTransaction();
SELECT id AS last_id FROM t WHERE...
INSERT INTO t (id,...) VALUES (last_id+1,....)
pdo::commit();
答案 0 :(得分:4)
答案是:这取决于。最重要的资源是帮助您准确理解它的作用,它不做什么以及它是如何工作的here。
首先,它取决于底层驱动程序(MySQL,MSSQL等)是否支持事务功能。如果驱动程序不支持事务,pdo::beginTransaction();
将失败并返回FALSE
,您的所有查询将立即执行。这并不是说LOCK TABLES
查询会失败 - 它取决于底层数据库引擎是否支持它。
事实上,至少在MySQL中,pdo::beginTransaction()
遵循与START TRANSACTION
语句相同的规则。它不会立即锁定表,它只是确保作为事务一部分的查询遵循ACID的规则。
我不会详细了解哪些组合会起作用以及它们会做什么,因为我们在链接的文件中详细介绍了这些组合,我再也没有意识到这一点。