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

时间:2019-01-14 12:01:55

标签: mysql transactions innodb rowlocking

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

伪代码为:

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

我无法在mysql文档中找到有关提交后所持有的锁的信息。

我必须在COMMIT之后执行“ UNLOCK TABLES”还是隐式的? 答案应该是“否”,但我希望对此有任何反馈。

1 个答案:

答案 0 :(得分:1)

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

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