如何理解資料庫鎖的相容性矩陣?

時間 2021-06-09 18:25:58

1樓:

考研複習到這,修改一下

從多粒度樹的角度著手理解。

在多粒度封鎖中,若對乙個節點加鎖(X、S),意味著這個點的後裔節點也被加以同樣的鎖。若對乙個節點加意向鎖,則說明正在對其子節點加(對應的)鎖(可理解為乙個事務中的先後次序)。任意節點加(X,S)鎖時,必須對其所有上級節點加意向鎖。

多粒度封鎖的加鎖順序是自頂向下,釋放鎖的順序是自下而上。

上級節點加的意向鎖不影響當前節點和其子節點上鎖的相容性。

設有事務AB,都對同一資料物件r加鎖。

X鎖排他,故只要A對r加X鎖,B不能再對r及其子節點加鎖。

S鎖,若A對r加S鎖,則r及其子節點均加S鎖,故r及其子節點不能加X鎖。也就是說B不能對r加X,IX,SIX這些包含X的鎖。

IX鎖,若A對r加IX鎖,則r到該節點路徑上的節點全加IX鎖,該節點及其子節點全加X鎖。為了保證加了X鎖的那個子節點上面不加其他的鎖,故B一定不能對r加X,S,SIX鎖。而至於IS,IX鎖,B是可以對r加的,因為要加X,S鎖的那個節點可能不同。

若要加鎖的節點相同則再用X,S鎖的相容矩陣解釋衝突。

SIX鎖,若A對r加SIX鎖,對則r先加了S鎖,釋放後再加IX鎖(一次操作中的先後次序),r的子節點分別對應加鎖。故B不能對r加並上。

IS鎖,若A對r加IS鎖,那麼r到要加S鎖的節點路徑上的節點全加IS鎖,該節點及其子節點全加S鎖。故B不能對其加X鎖。至於IX,SIX鎖是可以加的,因為對應要加鎖的子節點可能不同,相同時再按X,S鎖的相容矩陣判別即可。

原答案首先明確:

1.這個矩陣表示兩個事務T1 T2是否可以同時對同乙個物件加指定的鎖。

2.對於SIX=S+IX鎖的理解,雖然兩個不同事務是不允許同時向同一物件加S,IX鎖的。但是在乙個事務中是可以即加S鎖又加IX鎖的的。

因為鎖就是保護事務併發的正確性,讀和寫兩種命令在乙個事務裡就不存在併發的幾種錯誤情況。但看乙個事務就不需要考慮併發。理論上可以在乙個事務裡對同一物件又加S鎖又加X鎖,但根本沒這個必要。

T1加S鎖,T2只能加S和IS鎖。

X鎖排他,pass。

因為加S所後,對應資料的子節點都隱式的加了S鎖,所以加IX鎖表示其子節點擬加X鎖(確實邏輯上可能不會對子節點加鎖,但是只要有這個可能性就要保證正確性),X排他,pass。SIX鎖同理。

T1加X鎖,T2只能幹等著。因為X鎖排他,優先順序最高

T1加IS鎖,T2不能加X鎖。因為T1有對其子節點加S鎖的可能而T2扼殺了這個可能性。

至於T2為什麼能加IX鎖是因為I鎖只是意向鎖,所以是可行的,若事務有非意向鎖,根據相容矩陣再次判定。SIX鎖綜上同理。

T1加IX鎖,T2不能加S,X,SIX鎖的原因不再贅述。(不能加SIX鎖的原因,可參考不能加S鎖)

T1加SIX鎖,T2只能加IS鎖。

不能加S,X,IX,SIX鎖的原因分別是:

T2加S,T1無法完成SIX鎖的IX部分

T2加X,T1首先就無法完成S鎖,更別說SIX鎖

T2加IX,表示T2意向修改物件子節點,而T1要讀物件,若T2修改其子節點便產生併發錯誤。故pass

T2加SIX,綜合上面S和IX的情況。pass

如何理解資料庫中的完整性約束?

Coder 資料庫的integrity是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料 資料庫的security是保護資料庫,防止其被惡意破壞和非法訪問 這裡解釋一下什麼是資料庫的integrity 首先明確 資料庫的完整性 data correctness 資料正確性 d...

資料庫集合差運算中提到的 「 並相容性」 是什麼意思?

GuoFu 用普通人說的話就是,他們是一樣的。字串集合R,字串集合S,他們可以有邏輯上的並,差操作。但字串集合R,和乙個表的行集合S 表裡有多個列 這個就沒法操作計算了。 自稱都會派 簡單的說 R 與 S 的結構要一致,也就是它們的字段的數量 名稱 順序要一致 典型的情況是 R 和 S 是同一張表的...

資料庫併發時如何保證資料的正確性?

冀利鐲 select 編號,稱號,sum 數量 算計 from table1 group by 編號,稱號由於併發操作帶來了資料的不一致性 主要有三種 1 丟失修改 2 不可重複讀 3 讀 髒 資料併發操控確保了事務的一致性原子性阻隔性持續性打個比方說,賣火車票,這時候火車票就剩餘一張了,可是同時有...