ロックの互換性 (データベース エンジン)
ロックの互換性により、複数のトランザクションが同じリソースのロックを同時に獲得できるかどうかが制御されます。リソースが別のトランザクションによって既にロックされている場合、要求されたロックのモードと既存のロックのモードに互換性がある場合のみ、新しいロック要求の許可が可能になります。要求されたロックのモードと既存のロックとの互換性がない場合、新しいロックを要求しているトランザクションは、既存のロックが解除されるか、またはロックがタイムアウトするのを待機します。たとえば、排他ロックと互換性があるロック モードはありません。排他 (X) ロックが保持されている間は、その排他 (X) ロックが解除されるまで、他のトランザクションはこのリソースに対してどの種類のロック (共有、更新、排他) も獲得できません。リソースに共有 (S) ロックが適用されている場合は、他のトランザクションもそのアイテムの共有ロックまたは更新 (U) ロックを獲得できます。最初のトランザクションが完了している必要はありません。ただし、共有ロックが解除されないと、他のトランザクションは排他ロックを獲得できません。
適用対象: SQL Server 2008 R2 以上のバージョン。
次の表に、最も一般的に使用されるロック モードの互換性を示します。
|
既に許可されているモード |
|
|
|
|
|
---|---|---|---|---|---|---|
要求されたモード |
IS |
S |
U |
IX |
SIX |
X |
インテント共有 (IS) |
可 |
可 |
可 |
可 |
可 |
不可 |
共有 (S) |
可 |
可 |
可 |
不可 |
不可 |
不可 |
更新 (U) |
可 |
可 |
不可 |
不可 |
不可 |
不可 |
インテント排他 (IX) |
可 |
不可 |
不可 |
可 |
不可 |
不可 |
インテント排他付き共有 (SIX) |
可 |
不可 |
不可 |
不可 |
不可 |
不可 |
排他 (X) |
不可 |
不可 |
不可 |
不可 |
不可 |
不可 |
注 |
---|
インテント排他 (IX) はすべての行ではなく一部の行を更新することを指定するものなので、IX ロックは IX ロック モードと互換性があります。一部の行を読み取ったり更新したりする他のトランザクションも、他のトランザクションによって更新されている同じ行でない限り、許可されます。また、2 つのトランザクションが同じ行を更新しようとする場合は、両方のトランザクションにテーブル レベルとページ レベルの IX ロックが許可されます。ただし、行レベルの X ロックは一方のトランザクションに許可されるため、もう一方のトランザクションは、行レベルのロックが解除されるまで待機する必要があります。 |
ロックの互換性を示す表
次の表を使用すると、Microsoft SQL Server で使用できるすべてのロック モードの互換性を確認できます。