資料庫的封鎖協議
① 資料庫:為什麼一級封鎖協議不能保證不讀臟數據在修改的時候不是已經加了X鎖了嗎為什麼其他事務還能讀
一級封鎖協議是:事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。
注意,該協議是規定在修改數據R之前必須加鎖。所以如果事務T僅是讀數據而不對其進行修改,是不需要加鎖的;事務T在修改R之前,其他事務是能對R進行讀取的,所以它不能保證可重復讀和不讀「臟」數據。
② 資料庫中三級封鎖協議與兩段鎖協議有區別嗎
區別如下:
1、過程不同
三級封鎖協議是一部完成封鎖的,而後者卻要分為兩個階段,耗費時間
2、含義不同
兩段鎖協議是指每個事務的執行可以分為兩個階段:生長階段(加鎖階段)和衰退階段(解鎖階段),三級加鎖協議也稱為三級封鎖協議,是為了保證正確的調度事務的並發操作,事務在對資料庫對象加鎖,解鎖是必須遵守的一種規則.在運用X鎖和S鎖對數據對象加鎖時,還需要約定一些規則
3、功能不同
三級封鎖協議除防止了丟失修改和不讀「臟」數據外,還進一步防止了不可重復讀。後者只是對事務進行時的封鎖
(2)資料庫的封鎖協議擴展閱讀:
一、一級封鎖協議
一級封鎖協議是:事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。
一級封鎖協議可以防止丟失修改,並保證事務T是可恢復的。使用一級封鎖協議可以解決丟失修改問題。
在一級封鎖協議中,如果僅僅是讀數禪改據不對其進行修改,是不需要加鎖的,它不能保證可重復讀和不讀「臟」數據。
二、二級封鎖協議
二級封鎖協議是:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,讀完後方可釋放S鎖。
二級封賀磨判鎖協議除防止了丟失修改,還可以進一步防止讀「臟」數據。但在二級封鎖協議中,由於讀完數據後即可釋放S鎖,所以它不能保證可重復讀。
三、三級封鎖協議
三級封鎖協議是:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。
三級封鎖協議除防止了丟失修改和不讀「臟」數據外,還進一步防止了不可重復讀