![](/img/trans.png)
[英]Does PDO::beginTransaction() cause table or row locking until PDO::commit()?
[英]Is it neccessary to unlock a table after a commit while row level locking?
我正在编写一些使用 MySQL(innodb 后端)行级锁定的代码。
伪代码是:
START TRANSACTION
SELECT * FROM foo WHERE foocondition FOR UPDATE
UPDATE foo set bar=value WHERE foocondition
COMMIT
我在 mysql 文档中找不到关于提交后持有的锁的信息。
我必须在 COMMIT 之后执行“UNLOCK TABLES”还是隐式的? 答案应该是“否”,但我想对此提供反馈。
UNLOCK TABLES 与您在示例中使用的锁定读取无关。 当您之前使用 LOCK TABLES 命令锁定表时,您可以使用 UNLOCK TABLES。 即使您使用锁定读取来设置范围锁定,以便没有人可以向表中插入新行,表本身也没有被锁定。
由锁定读取设置的锁定,例如 SELECT ... FOR UPDATE 和 DML 语句(例如 UPDATE ... WHERE)在事务结束时自动释放。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.