PDO :: beginTransaction()在内部使用哪个MySql查询?

时间:2018-11-14 19:09:49

标签: php mysql pdo transactions locking

每当我需要在MySql中进行事务时,我都会多次使用PDO :: beginTransaction()而没有任何问题。但是,当我需要锁定表并仍然使用事务时,我发现

  1. “ LOCK TABLES不是事务安全的,并且在尝试锁定表之前会隐式提交任何活动事务”和
  2. “ UNLOCK TABLES隐式提交任何活动事务,但仅在使用LOCK TABLES来获取表锁的情况下”,

根据此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 = 0START 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()手册指出“关闭自动提交模式”?

0 个答案:

没有答案