我將有多個客戶端將數據輸入到數據庫中,並且我必須確保事務不會混雜在一起。SELECT FOR UPDATE在MySQL中保存整個表而不是逐行
我的文檔中讀取START TRANSACTION
和SELECT ... FOR UPDATE
鎖定每一行,它讀取:
的SELECT ... FOR UPDATE讀最新的數據,就可以讀取每一行設置獨佔鎖定。因此,它設置了與搜索的SQL UPDATE在行上設置的鎖相同的鎖。
見https://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
所以我登錄一個客戶端和類型化這些語句:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;
暫停這裏第二客戶端項....
UPDATE productMacAddress SET status='testing1' WHERE status='free' LIMIT 8;
COMMIT;
而在另一個客戶端,我類型:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 4 FOR UPDATE;
UPDATE productMacAddress SET status='testing2' WHERE status='free' LIMIT 4;
COMMIT;
但我無法從表SELECT
什麼,直到第一個客戶是完全做得到。這是爲什麼發生?該文件聲明它應該逐行鎖定,尤其是因爲我LIMIT 8
。
預先感謝您。