悲觀鎖與樂觀鎖

2021-08-30 23:46:54 字數 854 閱讀 1484

悲觀鎖與樂觀鎖是我們在資料庫程式設計時常常遇到的兩個概念,現在憑我的理解解釋下!(oracle為例)

字面解釋:

所謂悲觀鎖是指,在使用更改資料之前認為資料有可能已經被修改,所以首先對要更新的資料行進行鎖定。

所謂樂觀鎖是指,在使用更改資料之前認為資料沒有更改。

一般形式:

select for update nowait --鎖定查詢行一般用於悲觀鎖

update set                    --oracle中的更新本身就具有鎖的既能

舉例:

更新emp表miller的名字和工資。

使用悲觀鎖實現:

select empno, ename, sal from emp where empno = :empno

and ename = :ename and sal = :sal for update nowait;

update emp set ename = :ename, sal = :sal where empno = :empno;
commit;
加鎖後可能有以下幾種情況發生:

基本資料沒有更新,我們將獲得miller行,這一行將被鎖定不能由其他人更新。

如果正巧另外乙個人正在修個這條資料的過程當中,我們將獲得"ora-00054資源忙"的錯誤。我們被阻塞必須等待該使用者完成工作並釋放鎖資源才能夠再次利用。

在選擇資料和指定更新意圖的時間裡,乙個人已經更改了哪一行,那麼我們將獲得零行!

悲觀鎖與樂觀鎖

悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...

樂觀鎖與悲觀鎖

悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...

樂觀鎖與悲觀鎖

鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...