我正在编写一些使用MySQL(innodb后端)的行级锁定的代码。
伪代码为:
START TRANSACTION
SELECT * FROM foo WHERE foocondition FOR UPDATE
UPDATE foo set bar=value WHERE foocondition
COMMIT
我无法在mysql文档中找到有关提交后所持有的锁的信息。
我必须在COMMIT之后执行“ UNLOCK TABLES”还是隐式的? 答案应该是“否”,但我希望对此有任何反馈。
答案 0 :(得分:1)
UNLOCK TABLES与示例中使用的锁定读取无关。以前使用LOCK TABLES命令锁定表时,可以使用UNLOCK TABLES。即使您使用锁定读取来设置范围锁定,从而使任何人都无法向表插入新行,表本身也不会被锁定。
在事务结束时,将自动释放由诸如SELECT ... FOR UPDATE之类的锁定读取设置的锁以及诸如UPDATE ... WHERE之类的DML语句。