簡體   English   中英

樂觀鎖還是悲觀鎖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM