繁体   English   中英

在行级锁定时提交后是否有必要解锁表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM