數據庫-封鎖協議


1.三級封鎖協議

一級封鎖協議

事務在修改數據時必須先加X鎖,在事務結束之后釋放X鎖

這樣可以解決丟失修改的問題。因為不能有兩個事務同時修改同一個數據,所以不會有修改被覆蓋的問題。

二級封鎖協議

在一級的基礎上,要求讀取數據A之前必須加上S鎖,讀取A之后立即釋放S鎖

這樣可以解決讀臟數據的問題。因為一個事務如果對A進行修改,必須先加X鎖。其他事務就不能在數據A上加S鎖,就不能讀取A,也就不會讀到臟數據。

三級封鎖協議

在二級的基礎上,要求在讀取數據A之前加上S鎖,在事務結束之后再釋放S鎖

這樣可以解決不可重復讀的問題。因為在事務結束前,數據A上一直有S鎖,其他事務不能再在A上加X鎖來修改A,在讀取期間數據的值不會發生改變。

 

2.兩段鎖協議

加鎖和解鎖分兩個階段進行

兩段鎖協議可以解決幻影讀的問題。事務遵循兩段鎖協議是可串行化調度的充分非必要條件。可串行化調度是指,通過並發控制,使得事務並發執行的結果和某個串行執行事務的執行結果相同。串行執行的事務之間互不干擾,不會有並發一致性問題。


 

MySQL的InnoDB引擎采用兩段鎖協議,會根據隔離級別在需要的時候自動加鎖,在同一時刻釋放所有鎖,這被稱為隱式鎖定。InnoDB也有特定的語句進行顯式鎖定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM