簡體   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