每当我需要在MySql中进行事务时,我都会多次使用PDO :: beginTransaction()而没有任何问题。但是,当我需要锁定表并仍然使用事务时,我发现
根据此https://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-transactions.html。
但是,以上参考文献还指出:“将LOCK TABLES和UNLOCK TABLES与事务表(例如InnoDB表)一起使用的正确方法是,先以SET autocommit = 0(不是START TRANSACTION)开始事务,然后再加上LOCK TABLES,除非明确提交事务,否则不要调用UNLOCK TABLES”。
我了解到SET autocommit = 0
和START TRANSACTION
在MySql中在技术上是相同的。纠正我。但是上面的MySql参考说要使用
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;
现在可以代替
PDO::beginTransaction();
LOCK TABLES ...;
PDO::commit();
UNLOCK TABLES;
因为PHP PDO :: beginTransaction()手册指出“关闭自动提交模式”?