[数据库]数据库三级加锁协议深入理解
在并發事務的執行時,容易引起數據不一致,有一下幾種情況
丟失修改
:兩個事務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.三級封鎖線協議不可重復讀
在一級封鎖協議的基礎上,當事務在讀取數據的時候加共享鎖,事務結束后釋放
原理:加入共享鎖之后,不能對該數據加排他鎖,即其他事務不能進行修改數據。如果讀取完成后就釋放,那么其他事務此時可以修改該數據。當延遲到事務結束后釋放,其他事務就無法修改該數據了
事務的封鎖級別不是越高就越好,隨著封鎖粒度的增加會影響執行效率。
————————————————
版權聲明:本文為CSDN博主「豪滿天下」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43752167/article/details/100741144
總結
以上是生活随笔為你收集整理的[数据库]数据库三级加锁协议深入理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题30:包含min
- 下一篇: 【剑指offer】面试题18:删除链表的