因為我要做一個並發的處理(這裡的並發是小並發就是幾個人的並發),後台管理員操作一條還款數據,防止幾個管理在不知情的情況下,同時對一條去操作還款,產生錯誤。
我的做法是,在表裡加一個字段 lock_time 查詢lock_time等於0的這條數據,查詢出來後在更改lock_time為當前的時間(update時 where條件我加上了lock_time=0)。
問題:請問我這麼做還會有可能出現併發的情況嗎。
就是說,在理想環境下,兩個人同時把一條資料查詢出來(不差一分一秒‘同時’查詢),
同理,有沒有可能兩個人同時改變一條資料的某個欄位(不差一分一秒『同時』更改),
黄舟2017-05-16 13:06:36
你可以看一下樂觀鎖的概念。增加一個版本號字段,讀取資料可以不用管,更新資料的時候檢查版本號,並更新版本號。版本號碼比較你的lock_time的差別就是在lock_time精度不夠的情況下可能出現重複,版本號碼總是+1,不存在重複版本的問題
我想大声告诉你2017-05-16 13:06:36
你的思路接近樂觀鎖了,吧lock_time換成個時間戳做驗證,就是查出來的時間戳和你修改時的做對比然後提交。小並發用innodb的行鎖也是可以的,基本上沒有性能上吃力的感覺。