A ,B同時在一頁面上存取一組資料, A針對其中一條資料做了修改. B的頁面沒有刷新,所以B看見的資訊是在A修改之前的,這時候B也要修改這資料. 我如何做才能提醒B,這條資料已經被修改過.
看到一個辦法,修改資料之前根據這條資料最後修改的時間先將這條資料查出來(select * from xxx where updatetime = xxx and id= xxx),如果查不到說明修改過,查到了說明沒有修改.
我想問有沒有更好的辦法?
typecho2017-07-07 10:37:07
我記得hibernate中樂觀鎖用的是版本號字段實現的,每次更新成功後時候版本號字段的值加1
在更新前,先檢查數據庫中的版本號和頁面中保存的版本號是否相同,如果版本號碼變大,提示使用者在編輯期間已有其他使用者修改了資料。
當然也可以用悲觀鎖,進入頁面的時候使用的select ... for update鎖定記錄,這時候其他用戶就不能同時編輯鎖定的記錄了。
女神的闺蜜爱上我2017-07-07 10:37:07
在這條資料裡面加個version 欄位版本號 預設從0開始,沒修改一次自增一次,每次提交驗證本次的version和資料庫裡的version是否一致即可。