A ,B同時在一頁面上存取一組資料, A針對其中一條資料做了修改. B的頁面沒有刷新,所以B看見的資訊是在A修改之前的,這時候B也要修改這資料. 我如何做才能提醒B,這條資料已經被修改過.
看到一個辦法,修改資料之前根據這條資料最後修改的時間先將這條資料查出來(select * from xxx where updatetime = xxx and id= xxx),如果查不到說明修改過,查到了說明沒有修改.
我想問有沒有更好的辦法?
光阴似箭催人老,日月如移越少年。
我記得hibernate中樂觀鎖用的是版本號字段實現的,每次更新成功後時候版本號字段的值加1在更新前,先檢查數據庫中的版本號和頁面中保存的版本號是否相同,如果版本號碼變大,提示使用者在編輯期間已有其他使用者修改了資料。
當然也可以用悲觀鎖,進入頁面的時候使用的select ... for update鎖定記錄,這時候其他用戶就不能同時編輯鎖定的記錄了。
我會這樣做————加個字段,edit_num,每改一次+1,B要改的時候比對一下。
樂觀鎖 樂觀鎖 樂觀鎖
樂觀鎖機制 透過為資料添加version欄位來實現
給資料表加個欄位update_at類型為TIMESATMP,預設值為CURRENT_TIMESTAMP,其他不用改每當資料更新後,該值會自動更新
update_at
TIMESATMP
CURRENT_TIMESTAMP
在這條資料裡面加個version 欄位版本號 預設從0開始,沒修改一次自增一次,每次提交驗證本次的version和資料庫裡的version是否一致即可。
xxx表格裡加一個版本號碼的欄位
我記得hibernate中樂觀鎖用的是版本號字段實現的,每次更新成功後時候版本號字段的值加1
在更新前,先檢查數據庫中的版本號和頁面中保存的版本號是否相同,如果版本號碼變大,提示使用者在編輯期間已有其他使用者修改了資料。
當然也可以用悲觀鎖,進入頁面的時候使用的select ... for update鎖定記錄,這時候其他用戶就不能同時編輯鎖定的記錄了。
我會這樣做————加個字段,edit_num,每改一次+1,B要改的時候比對一下。
樂觀鎖 樂觀鎖 樂觀鎖
樂觀鎖機制 透過為資料添加version欄位來實現
給資料表加個欄位
update_at
類型為TIMESATMP
,預設值為CURRENT_TIMESTAMP
,其他不用改每當資料更新後,該值會自動更新
在這條資料裡面加個version 欄位版本號 預設從0開始,沒修改一次自增一次,每次提交驗證本次的version和資料庫裡的version是否一致即可。
xxx表格裡加一個版本號碼的欄位