先查詢某一行的值,然后在更新這個值。在高并發(fā)的情況下,A 用戶 查出來的值比如是 8,這時候按著8進行處理過程中,有另外的用戶B,將這個值改成了10,當A用戶再去更新的時候,就會造成數(shù)據(jù)的更新丟失。
通過對查詢更新方法設(shè)置事務(wù),加入防重復(fù)讀的隔離級別,也是解決不了更新丟失問題的。防重復(fù)讀,只能保證第一次讀到是8,后面在怎么讀這條記錄,結(jié)果都是8。
解決這個問題,在mysql 數(shù)據(jù)庫層面,只有用for update (悲觀鎖)或是樂觀鎖來鎖住這一行記錄。
問題是,對于事務(wù)與mysql悲觀鎖的理解有點混沌了。請高人給指點迷津。
4 回答

MYYA
TA貢獻1868條經(jīng)驗 獲得超4個贊
WHERE里加條件:
SELECT quantity FROM products WHERE id=3; 假設(shè)讀到的quantity為8
UPDATE products SET quantity = '10' WHERE id=3 AND quantity=8;
添加回答
舉報
0/150
提交
取消