數據庫的兩段鎖協議是指所有事務必須分兩個階段對數據項進行加鎖和解鎖
1.擴展階段
在對任何數據項的讀、寫之前,要申請並獲得該數據項的封鎖。
2.收縮階段
每個事務中,所有的封鎖請求必須先於解鎖請求。
例如:事務T遵循兩段鎖協議,其封鎖協議為:
BEGIN TRANSACTION;
LOCK(A);READ A; A := A + 100; WRITE A; LOCK(B); UNLOCK(A); READ(B), UNLOCK(B),;
COMMIT;
可以證明:若並發執行的所有事務均遵守兩段鎖協議,則對這些並行事務的任何並行調度策略都是可串行化
需要說明的是,並發執行的所有事務若均遵守兩段鎖協議,只是這些事務的並行調度策略能可串行化的充分條件,不是必要條件。
兩段鎖協議與防止死鎖的一次封鎖法的區別:
一次封鎖法要求事務必須一次對所有要使用到的數據項進行加鎖,否則不能繼續運行。
顯然,一次封鎖法符合兩段鎖協議,但是兩段鎖協議並不要求一次就要對所有需要用到的數據項進行加鎖,因此遵守兩段鎖協議的事務有可能死鎖
