SQL使用資源鎖定的方式管理用戶的并發(fā)操作:
- 樂觀并發(fā)控制:假定用戶之間不太可能發(fā)生資源沖突,允許用戶在不鎖定任何資源的情況下執(zhí)行事務(wù),只有當(dāng)用戶試圖修改數(shù)據(jù)時才檢查資源是否沖突,需要使用游標(biāo)。
- 悲觀并發(fā)控制:根據(jù)需要在事務(wù)的持續(xù)時間內(nèi)鎖定資源,從而確保事務(wù)的完整性和數(shù)據(jù)庫的一致性(默認(rèn))
基本鎖:
一般更新模式由一個事物組成,該事務(wù)先讀取記錄,獲得資源的共享鎖,然后修改記錄,次操作要求鎖轉(zhuǎn)換為排它鎖
- 共享鎖(S鎖 Share lock)
用于只讀數(shù)據(jù)操作,它允許多個并發(fā)事務(wù)對資源鎖定進(jìn)行讀取,但禁止其他事務(wù)對鎖定資源進(jìn)行修改操作。 -
排他鎖(X鎖 eXclusive lock)
它鎖定的資源不能被其他并發(fā)事務(wù)再進(jìn)行任何鎖定,所以其他事務(wù)不能讀取和修改鎖定的資源用于自己數(shù)據(jù)的修改。
image.png
三級封鎖協(xié)議:
- 一級封鎖協(xié)議
事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放,結(jié)束包括正常結(jié)束與非正常結(jié)束。
可以防止丟失修改,并保證事務(wù)T是可以恢復(fù)的,但是不能保證可重復(fù)讀和不讀的臟數(shù)據(jù)。 - 二級封鎖協(xié)議
一級封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R前必須先加S鎖,讀完后即可釋放S鎖
可以防止丟失修改,還可以進(jìn)一步防止讀“臟數(shù)據(jù)”,不能保證可重復(fù)讀 - 三級封鎖協(xié)議
一級封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R前必須先加S鎖,直到事務(wù)結(jié)束才能釋放。
可以防止丟失修改,讀“臟數(shù)據(jù)”和不可重復(fù)讀
