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