樂觀鎖與悲觀鎖

2021-10-10 02:46:55 字數 940 閱讀 9113

悲觀鎖的本質上是資料庫自身所具備的一種機制,在資料庫的事務裡面有乙個隔離性的概念,其主要的特徵是當乙個session操作某條資料的時候,其它的session是無法操作的,所以這就是一種鎖的實現,而這種鎖是資料庫自身所帶的功能。但是在之前都是針對於更新的操作使用的鎖,於是如果希望在查詢的時候也使用鎖,那麼就加上for update:

select

*from 表名稱 for

update;

表示使用悲觀鎖,在事務提交或回滾之前資料都不允許更新。

而樂觀鎖是不使用資料庫鎖的處理情況(並不推薦),需要在你真正使用的資料表裡面追加乙個字段,而這個字段用於做乙個版本號,例如:正常情況下你的使用者表可能只有mid、password,但是如果你使用的樂觀鎖則還需要追加有乙個欄位的列,這個列標識版本號:

create

table member(

mid varchar(50

)primary

key,

name varchar(50

),ver int

default0)

;

現在假設有一條資料:

insert

into member(mid.name,ver) valuse (

'mldn'

,'hello',0

);

現在假設有兩個session要進行該資料的讀取,由於沒有使用悲觀鎖,所以兩個session都可以對該資料進行修改操作,於是第乙個session修改了資料,修改之後將版本號做了乙個「+1」,變為了1,而後另外乙個 session更新的時候,發現版本號不對,則不允許更新。

樂觀鎖是基於演算法的一種實現, 實際之中會非常的麻煩,在hibernate設計框架裡面有此概念,但是如果從我們開發角度來講,建議這種操作交由 資料庫自行處理,建議使用悲觀鎖。

悲觀鎖與樂觀鎖

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

樂觀鎖與悲觀鎖

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

樂觀鎖與悲觀鎖

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