[數據庫]數據庫三級加鎖協議深入理解

在併發事務的執行時,容易引起數據不一致,有一下幾種情況
  • 丟失修改
    :兩個事務T1和T2讀入同一數據並修改,T2提交的結果破壞了T1提交的結果,導致T1的修改被丟失
  • 讀髒數據
    :事務T1對數據D進行修改,事務T2讀取到了事務T1修改的數據,接着事務T1發生異常進行回滾,事務T2讀取到的就叫做“髒數據"
  • 不可重複讀
    :不可重複讀是指事務T1讀取數據後,事務T2執行更新操作,使T1無法再現前一次讀取結果

數據庫的三段加鎖協議,可以很好的解決以上問題

三段鎖協議:

  • 共享鎖(S鎖):共享 (S) 用於不更改或不更新數據的操作(只讀操作),如 SELECT 語句。

如果事務T對數據A加上共享鎖後,則其他事務只能對A再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀數據,不能修改數據。

  • 排他鎖(X鎖):用於數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。

如果事務T對數據A加上排他鎖後,則其他事務不能再對A加任任何類型的封鎖。獲准排他鎖的事務既能讀數據,又能修改數據。

用三段鎖協議來解決數據不一致的三種情況

  • 1.一級封鎖協議解決丟失修改
    當事務在更新數據的時候給數據加上排他鎖
    原理:加上排他鎖之後,其他事務不能對該數據加上任意鎖,在當前事務沒有釋放鎖時其他事務不能進行對該數據的讀寫操作,只有當前事務釋放排他鎖之後,才能對該數據進行操作

  • 2.二級封鎖協議解決讀髒數據
    在一級封鎖協議的基礎上,當事務在讀取數據的時候加共享鎖,讀取完成後釋放鎖
    原理:加入共享鎖之後,不能對該數據加排他鎖,即其他事務不能進行修改數據。所以此時讀取的數據一定是與數據庫一致的

  • 3.三級封鎖線協議不可重複讀
    在一級封鎖協議的基礎上,當事務在讀取數據的時候加共享鎖,事務結束後釋放
    原理:加入共享鎖之後,不能對該數據加排他鎖,即其他事務不能進行修改數據。如果讀取完成後就釋放,那麼其他事務此時可以修改該數據。當延遲到事務結束後釋放,其他事務就無法修改該數據了

事務的封鎖級別不是越高就越好,隨着封鎖粒度的增加會影響執行效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章