1

我正在编写一些将行级锁定与 MySQL(innodb 后端)一起使用的代码。

伪代码是:

START TRANSACTION
SELECT * FROM foo WHERE foocondition FOR UPDATE
UPDATE foo set bar=value WHERE foocondition
COMMIT

我在 mysql 文档中找不到关于提交后持有的锁的信息。

我必须在 COMMIT 之后执行“解锁表”还是隐含的?答案应该是“否”,但我想对此提出反馈。

4

1 回答 1

1

UNLOCK TABLES 与您在示例中使用的锁定读取无关。当您以前使用 LOCK TABLES 命令锁定表时,您可以使用 UNLOCK TABLES。即使您使用锁定读取来设置范围锁,以便没有人可以向表中插入新行,表本身也不会被锁定。

由 SELECT ... FOR UPDATE 之类的锁定读取设置的锁和 UPDATE ... WHERE 之类的 DML 语句在事务结束时自动释放。

于 2019-01-24T15:35:50.003 回答