資料庫中的樂觀鎖和悲觀鎖以及實現方式

2021-10-03 15:24:05 字數 1043 閱讀 8181

樂觀鎖:獲取資料時不會考慮併發情況造成的資料衝突,然後再資料更新提交時正式對資料的衝突與否進行檢測,如果發現衝突了,則返回錯誤資訊,讓使用者重新操作。

悲觀鎖:總是做最壞的打算,每次去讀取資料都會認為會被其它執行緒修改,所以會加鎖,當其它執行緒想要訪問資料時,都需要阻塞掛起。

version方式:

一般在資料表中加乙個version版本字段,表示資料被修改的版本次數,當資料被修改時,version會被加一。當執行緒a讀取資料時也要同時讀取version值,在提交更新的時候,如果剛才讀取的version值和當前資料庫裡的version值一致,那麼才能更新,否則重新更新操作,直到更新成成功

sql**實現:

//查詢商品的名稱,狀態以及該資訊的版本號字段

select

(name,

status

,version)

from t_goods where id =

#//修改商品中狀態為2

update t_goods set

status=2

.version =version+

1where id =

# and version =#

for update方式:

一般使用select … for update 對所選擇的資料加鎖,例如 select * from t_goods where id =1 for update, 這條sql語句就鎖定了t_goods表中符合id=1的這條記錄,本次事務提交之前,外界無法修改這些記錄

//開始事務

begin

;//查詢商品資訊並上鎖

select

status

from t_goods where id =

1for

update

;//修改該商品的狀態為2

update t_goods set

status=2

where id =1;

//提交事務

commit

;

資料庫的樂觀鎖和悲觀鎖

悲觀鎖 假定會發生併發衝突,遮蔽一切可能違反資料完整性的操作,假設資料肯定會衝突,所以在資料開始讀取的時候就把資料鎖定住。資料鎖定 資料將暫時不會得到修改 樂觀鎖 假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性。資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則...

資料庫 (2)樂觀鎖和悲觀鎖

併發控制手段 樂觀鎖 樂觀併發控制 悲觀鎖 悲觀併發控制 悲觀鎖 當我們要對乙個資料庫中的一條資料進行修改的時候,為了避免同時被其他人修改,最好的辦法就是對該資料進行加鎖以防止併發。這種借助資料庫鎖機制在修改資料之前先鎖定,再修改的方式稱之為悲觀併發控制。悲觀併發控制實際上是 先取鎖再訪問的保守策略...

資料庫鎖 樂觀鎖 悲觀鎖理解

參考 mysql innodb中,樂觀鎖 悲觀鎖 共享鎖 排它鎖 行鎖 表鎖 死鎖概念的理解 樂觀鎖最簡單的實現就是在表中加乙個版本號欄位如version,每次新增設定為1,更新的時候檢查版本號是否一致,如果不一致就更新失敗。版本一致才能更新,然後將版本號 1。首先資料庫需要關閉自動提交功能,或者說...