php - mysql的資料查詢與變更有可能同時發生嗎?
大家讲道理
大家讲道理 2017-05-16 13:04:36
0
5
478

因為我要做一個並發的處理(這裡的並發是小並發就是幾個人的並發),後台管理員操作一條還款數據,防止幾個管理在不知情的情況下,同時對一條去操作還款,產生錯誤。

我的做法是,在表裡加一個字段 lock_time 查詢lock_time等於0的這條數據,查詢出來後在更改lock_time為當前的時間(update時 where條件我加上了lock_time=0)。

問題:請問我這麼做還會有可能出現併發的情況嗎。

就是說,在理想環境下,兩個人同時把一條資料查詢出來(不差一分一秒‘同時’查詢),

同理,有沒有可能兩個人同時改變一條資料的某個欄位(不差一分一秒『同時』更改),

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(5)
为情所困

你的問題,答案是完全有可能的。你應該使用鎖和事務來避免這些問題,而不是再使用一個新的欄位

滿天的星座

百度 innodb 鎖 就可以了。

黄舟

你可以看一下樂觀鎖的概念。增加一個版本號字段,讀取資料可以不用管,更新資料的時候檢查版本號,並更新版本號。版本號碼比較你的lock_time的差別就是在lock_time精度不夠的情況下可能出現重複,版本號碼總是+1,不存在重複版本的問題

小葫芦

鎖和事物應該可以滿足你的要求,具體去看Mysql的這兩個概念吧。

我想大声告诉你

你的思路接近樂觀鎖了,吧lock_time換成個時間戳做驗證,就是查出來的時間戳和你修改時的做對比然後提交。小並發用innodb的行鎖也是可以的,基本上沒有性能上吃力的感覺。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板