搜尋

首頁  >  問答  >  主體

php - mysql的資料查詢與變更有可能同時發生嗎?

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

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

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

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

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

大家讲道理大家讲道理2795 天前463

全部回覆(5)我來回復

  • 为情所困

    为情所困2017-05-16 13:06:36

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

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:06:36

    百度 innodb 鎖 就可以了。

    回覆
    0
  • 黄舟

    黄舟2017-05-16 13:06:36

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

    回覆
    0
  • 高洛峰

    高洛峰2017-05-16 13:06:36

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

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:06:36

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

    回覆
    0
  • 取消回覆