2017-03-02 73 views
1

我正試圖獲取數據庫中表的行級鎖,以防止任何將來的會話讀取該行直到鎖被釋放。MySQL和PHP:使用SELECT FOR UPDATE

爲了實現這一點,我一直試圖在索引列上使用SELECT ... FOR UPDATE語法,但是我似乎無法阻止其他會話在使用完全相同的查詢時讀取該行。

還有什麼我需要做的嗎?我使用的是MySQL 5.5,PHP 7,問題表是Innodb。

爲了詳細說明,流程是這樣的:

START TRANSACTION; 
SELECT id FROM tbl WHERE id = 1 FOR UPDATE; 
... (PHP stuffs) 
UPDATE tbl SET value = 'xyz' WHERE id = 1; 
COMMIT TRANSACTION; 

後續的請求也將運行的代碼完全一樣的臺詞,但我想一個請求從開始直到它提交事務阻止其他人。

回答

0

你看過MySql文檔中關於InnoDB鎖類型的文章嗎?

https://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html

+0

我不相信這些適用於使用'FOR UPDATE'時。 –

+0

歡迎來到SO @cesarandré請避免鏈接唯一的答案。如果不能發表評論,請使用評論部分,首先收集聲望。 – 2017-07-19 18:18:59