1、首先有一張很簡單的表(goods)
id:主鍵用於用戶通過id查詢出商品
title:商品的標題
num:商品的數量
version:該字段的作用下面再體現
2、初始化一條數據
insert into goods values(1,"手機",100,1);
3、如果用戶購買商品,高併發的情況下,可能會有很多用戶讀到的商品數量爲100
4、應用場景:
用戶點擊購買,商品數量減一,這時候商品數量爲99,但是在併發的情況下,可能會出現多個用戶(10)購買後剩餘商品數量仍然爲99,本來庫存應該只剩下90(sql語句如下,每次更新都需要吧version++)
update goods set num = 99,version = 2 where id = 1;
5、解決辦法,樂觀鎖的原理,樂觀鎖是在事務提交的時候進行驗證(這裏的實現是通過驗證版本號)
6、在執行更新商品數量的時候,把用戶讀到的version和數據庫中的version比較,如果提交的版本號高於讀取到的版本號,則可以更新,返回更新記錄條數,如果不一樣,表示當前的記錄不是數據庫中最新的記錄,或者表明該記錄已經被其他用戶修改過,則拋出異常,沒有更新的記錄。