1. 程式人生 > >資料庫的封鎖

資料庫的封鎖

封鎖就是事務T在對某個資料物件操作之前,先向系統發出請求,對其加鎖。加鎖後事務T就對該資料物件有了一定的控制,在事務T釋放它的鎖之前,其他事務不能更新此資料物件。

基本封鎖型別有兩種:排它鎖(exclusive locks,簡稱X鎖)又稱為寫鎖,和共享鎖(share locks,簡稱S鎖)又稱為讀鎖。

1、一級封鎖協議

一級封鎖協議是指,事務T在修改資料R之前必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。

一級封鎖協議可防止丟失修改,並保證事務T是可恢復的。

2、二級封鎖協議

二級封鎖協議是指,在一級封鎖協議基礎上增加事務T在讀取資料R之前必須先對其加S鎖,讀完後即可釋放S鎖。

二級封鎖協議除防止丟失修改,還可進一步防止讀“髒”資料。

3、三級封鎖協議

三級封鎖協議是指,在一級封鎖協議的基礎上增加事務T在讀取資料R之前必須先對其加S鎖,直到事務結束才釋放。

三級封鎖協議除了防止丟失修改和讀“髒”資料外,還進一步防止了不可重複讀。

可序列化排程

多個事務的併發執行是正確的,當且僅當其結果與按某一次序列地執行這些事務時的結果相同,稱這種排程策略為可序列化排程。

兩段鎖協議

兩段鎖協議是指所有事務必須分為兩個階段對資料項加鎖和解鎖。

  • 在對任何資料進行讀、寫操作之前,首先要申請並獲得對該資料的封鎖;
  • 在釋放一個封鎖之後,事務不再申請和獲得任何其他封鎖。

所謂的“兩段”鎖的含義是,事務分為兩個階段,第一階段是獲得封鎖,也稱為擴充套件階段,在這個階段,事務可以申請獲得任何資料項上的任何型別的鎖,但是不能釋放任何鎖;第二階段是釋放封鎖,也稱為收縮階段,在這個階段,事務可以釋放任何資料項上的任何型別的鎖,但是不能在申請任何鎖。

事務遵守兩段鎖協議是可序列化排程的充分條件,而不是必要條件。