select (id,count,version) from t_goodsku where id=#{id} 2、扣減2個庫存:
程序中計算:count = count - 2;
3、更新庫存:
update t_goodsku set count={count},version=version+1 where id=#{id} and version=#{version}; 第1步中查到的version其實是快照(read-commited和read-repeatable隔離機制下的MVCC機制),在這種情況下,第3步去update時,獲取鎖,where條件中進行判斷中的version=#{version},其實是拿當前version和第1步中的快照version進行比對
如果比對成功,說明在這段時間內這條數據沒有被其他線程更新過,update成功;
如果對比失敗,說明這段時間內這條數據被更新過,那么update失敗,報錯回滾或自旋。
當然,這里是為了模擬樂觀鎖的場景,實際上更新庫存時一步便可以實現:
更新庫存:
update t_goodsku set count=count -2 where id=#{id}; 到此,關于“mysql樂觀鎖如何實現”的學習就結束了,希望能夠解決大家的疑惑。