鎖定相容性 (Database Engine)
鎖定相容性可控制多筆交易是否可同時對相同的資源取得鎖定。若資源已被其他交易鎖定,則只有在要求的鎖定模式與現有鎖定模式相容時,才能授與新的鎖定要求。若所要求鎖定的模式與現有鎖定不相容,則要求新鎖定的交易會等候現有鎖定被釋放,或等候鎖定逾時間隔過期。例如,沒有任何一種鎖定模式與獨佔鎖定相容。有獨佔 (X) 鎖定存在時,其他的交易都無法取得該資源的任何一種鎖定 (共用、更新或獨佔),直到獨佔 (X) 鎖定被釋放為止。此外,如果資源已套用共用 (S) 鎖定,則即使第一筆交易尚未完成,其他的交易仍可取得該項目的共用鎖定或更新 (U) 鎖定。然而在共用鎖定尚未釋放之前,其他的交易仍然無法取得獨占鎖定。
下表顯示常見鎖定模式的相容性。
|
現有已授與的模式 |
|
|
|
|
|
---|---|---|---|---|---|---|
要求的模式 |
IS |
S |
U |
IX |
SIX |
X |
意圖共用 (IS) |
是 |
是 |
是 |
是 |
是 |
否 |
共用 (S) |
是 |
是 |
是 |
否 |
否 |
否 |
更新 (U) |
是 |
是 |
否 |
否 |
否 |
否 |
意圖獨占 (IX) |
是 |
否 |
否 |
是 |
否 |
否 |
與意圖獨占共用 (SIX) |
是 |
否 |
否 |
否 |
否 |
否 |
獨占 (X) |
否 |
否 |
否 |
否 |
否 |
否 |
[!附註]
意圖獨佔 (IX) 鎖定與 IX 鎖定模式相容,因為 IX 表示意圖是僅更新某些資料列而非更新全部。嘗試讀取或更新某些資料列的其他交易也可獲得許可,只要這些資料列與其他交易所更新的資料列不相同即可。
完整的鎖定相容性矩陣
使用下表來判斷 MicrosoftSQL Server 中所有可用的鎖定模式之相容性。