方法1update t_goods
set num = num - #
where
id = #
and num - # >= 0
and status = 1
方法2不建議使用版本號更新的方式update t_goods
set num = num - #
where
id = #
and num>=#
and status = 1
版本號的方法並不是適用於所有的樂觀鎖場景。舉個例子,當電商搶購活動時,大量併發進入,如果僅僅使用版本號或者時間戳,就會出現大量的使用者查詢出庫存存在,但是卻在扣減庫存時失敗了,而這個時候庫存是確實存在的。想象一下,版本號每次只會有乙個使用者扣減成功,不可避免的人為造成失敗.
資料庫庫存扣減樂觀鎖使用
資料庫加樂觀鎖 使用資料版本 version 記錄機制實現,這是樂觀鎖最常用的一種實現方式。何謂資料版本?即為資料增加乙個版本標識,一般是通過為資料庫表增加乙個數字型別的 version 欄位來實現。當讀取資料時,將version欄位的值一同讀出,資料每更新一次,對此version值加一。當我們提交...
mysql樂觀鎖實現 mysql樂觀鎖實現
在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 1.丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。2.髒讀 當乙個事務讀取其它完成...
mysql 樂觀鎖實現 mysql 樂觀鎖實現
一 為什麼需要鎖 併發控制 在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 1.丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。2....