[英]optimistic lock or pessimistic lock?
在我的應用程序中,每當我更新數據庫中的記錄時,我都會使用類似查詢:udapte set ... from mytable where status ='normal' ;
mytable中有一個稱為狀態的字段,如果插入/刪除記錄,它將以normal / cancel作為值。
現在,當我同時在mytable上同時執行查詢時,它工作正常,正在處理並發(三人遠程訪問)。 但是現在我想知道它是哪種類型的鎖? 樂觀或悲觀,或都不是。
經歷http://en.wikipedia.org/wiki/Optimistic_concurrency_control增加了我已經存在的疑問,因為我沒有注冊時間戳!
在您的情況下並發不被處理。 用戶1可能會覆蓋用戶2的數據,而不會看到或不知道用戶2的更新。
樂觀鎖定是在記錄上使用諸如RowVersion
類的構造的RowVersion
。 發生的情況是User1獲取記錄和RowVersion,然后User2在第二秒獲取記錄。 User1更新記錄, RowVersion
遞增為RowVersion
嘗試更新記錄,但由於他/她的RowVersion舊而無法。
用戶1
UPDATE record
SET status = 'test', RowVersion = 2
WHERE RowVersion = 1;
用戶2
UPDATE record
SET status = 'test2', RowVersion = 2
WHERE RowVersion = 1;
該語句導致零記錄受影響,因為RowVersion更改為2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.