2014-09-24 142 views
0

在我的應用程序,每當我更新數據庫的記錄,我使用的查詢,如: udapte設置...從MYTABLE 那裏狀態=「正常」;樂觀鎖或悲觀鎖?

有在MYTABLE場稱爲狀態將帶正常/如果一個記錄被插入/刪除的取消作爲值。

現在,當我同時做mytable上查詢具體而言,它做工精細,併發被處理(含三人遠程訪問)。但現在我想知道它是哪種類型的鎖?樂觀的或悲觀的或兩者都不是。

通過http://en.wikipedia.org/wiki/Optimistic_concurrency_control會已經加入到懷疑我已經有了,因爲我不是註冊戳!

+0

RDBMS是什麼? .______ – usr 2014-09-24 08:55:43

+0

@usr RDBMS是oracle – 2014-09-24 16:00:21

回答

0

在您的場景中併發性未得到處理。用戶1可能會覆蓋用戶2的數據,而無需查看或瞭解用戶2的更新。

樂觀鎖是你使用的東西,像構造上備案RowVersion。會發生什麼是User1獲取記錄和RowVersion,然後User2在第二秒後獲取記錄。用戶1更新記錄和增量爲2,用戶2嘗試更新記錄但不能因爲他/她的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

+0

你不認爲我們通過使用'status = normal'來達到同樣的效果,這與使用rowversion類似(至少在概念上)。你的意見是什麼? – 2015-04-01 06:17:13