行级锁定时提交后是否需要解锁 table?
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" 还是隐含的?
答案应该是 "NO",但我希望得到反馈。
UNLOCK TABLES 与您在示例中使用的锁定读取无关。当您之前使用 LOCK TABLES 命令锁定 table 时,您可以使用 UNLOCK TABLES。即使您使用锁定读取来设置范围锁定,以便没有人可以向 table 插入新行,table 本身也不会被锁定。
由像 SELECT ... FOR UPDATE 和 DML 语句如 UPDATE ... WHERE 这样的锁定设置的锁在事务结束时自动释放。
我正在编写一些使用 MySQL(innodb 后端)行级锁定的代码。
伪代码为:
START TRANSACTION
SELECT * FROM foo WHERE foocondition FOR UPDATE
UPDATE foo set bar=value WHERE foocondition
COMMIT
我无法在 mysql 文档中找到有关提交后持有的锁的信息。
我必须在 COMMIT 之后执行 "UNLOCK TABLES" 还是隐含的? 答案应该是 "NO",但我希望得到反馈。
UNLOCK TABLES 与您在示例中使用的锁定读取无关。当您之前使用 LOCK TABLES 命令锁定 table 时,您可以使用 UNLOCK TABLES。即使您使用锁定读取来设置范围锁定,以便没有人可以向 table 插入新行,table 本身也不会被锁定。
由像 SELECT ... FOR UPDATE 和 DML 语句如 UPDATE ... WHERE 这样的锁定设置的锁在事务结束时自动释放。