ロック ヒント (SQL Server Compact Edition)
SELECT、INSERT、UPDATE、および DELETE の各ステートメントを使用して、テーブル レベルのロック ヒントの範囲を指定し、Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) の既定のロック動作を変更できます。ロック ヒントは、絶対に必要な場合にだけ使用してください。ロック ヒントの使用が、同時実行性に悪影響を及ぼすことがあります。
重要 : |
---|
SQL Server Compact Edition では、操作に必要なロックが自動的に取得されます。次の表に示すロック ヒントを使用すると、SQL Server Compact Edition でさらに多くのロックが行われるようになります。ロック ヒントを使用してリソースのロックを回避することはできません。 |
次の表に、SQL Server Compact Edition で使用できるロック ヒントについて説明します。
ロック ヒント名 | ヒントの説明 | ||
---|---|---|---|
GRANULARITY |
|||
ROWLOCK |
データの読み取りまたは変更を行う場合に、行レベルのロックを使用します。これらのロックは必要に応じて取得され、解除されます。 SELECT 操作では行で S ロックが取得されます。 |
||
PAGLOCK |
データの読み取りまたは変更を行う場合に、ページ レベルのロックを使用します。これらのロックは必要に応じて取得され、解除されます。 SELECT 操作ではページで S ロックが取得されます。 |
||
TABLOCK |
データの読み取りまたは変更を行う場合に、テーブル ロックを使用します。このロックは、ステートメントが終了するまで保持されます。 SELECT 操作ではテーブルで S ロックが取得されます。 |
||
DBLOCK |
データの読み取りまたは変更を行う場合に、データベース ロックを使用します。このロックは、ステートメントが終了するまで保持されます。 SELECT 操作ではデータベースで S ロックが取得されます。 |
||
LOCKMODES |
|||
UPDLOCK |
テーブルの読み取り中は、共有ロックの代わりに更新ロックを使用し、ステートメントまたはトランザクションが終了するまで保持ロックを使用します。UPDLOCK では、他のユーザーがデータを読み取るのをブロックせずにデータを読み取ることができます。また、最後の読み取り以降はデータが変更されていないという保証があるので、後でデータを更新できます。 SELECT 操作では、U ロックが取得されます。既定の粒度は ROWLOCK です。 |
||
XLOCK |
テーブルの読み取り中は、共有ロックの代わりに排他ロックを使用し、ステートメントまたはトランザクションが終了するまでロックが保持されます。 SELECT 操作では、X ロックが取得されます。既定の粒度は ROWLOCK です。 |
||
DURATION |
|||
HOLDLOCK |
必要なテーブル、行、またはデータ ページが要求されなくなったときに、すぐにロックを解除するのではなく、トランザクションが終了するまでロックを保持します。 粒度が指定されていない場合、ROWLOCK が適用されます。 |
||
NOLOCK |
いずれのロックも実行しません。これは SELECT 操作の既定です。NOLOCK は INSERT、UPDATE、および DELETE の各ステートメントには適用されません。
|
ロック ヒントの使用に関する詳細については、SQL Server Books Online の「ロック ヒント」を参照してください。
NOLOCK ヒント
SQL Server Compact Edition では、SQL Server と同様の方法でロック ヒントを使用できます。ただし、NOLOCK ヒントの動作は SQL Server Compact Edition と SQL Server とで大きく異なります。SQL Server Compact Edition の場合、NOLOCK ヒントは SELECT ステートメントの既定ですが、この場合も引き続き Read Committed 動作が適用されます。
SQL Server の場合、既定の分離レベルの Read Committed が指定された SELECT ステートメントでは、行に対して読み取り時に S ロックが取得され、解放されます。これにより、分離レベルが適用されますが、S ロックが必要な行に互換性のないロックが存在する場合に、SELECT ステートメントが待機することを意味します。NOLOCK ヒントが指定されている場合、SELECT 操作では S ロックが取得されずにデータが読み取られます。操作は成功しますが、この場合、SELECT ステートメントはコミットされないデータも読み取ります。
SQL Server Compact Edition では、データが Read Committed となるよう S ロックが使用されることはありません。SQL Server Compact Edition ではデータの変更時にページのバージョン管理メカニズムが使用されるので、SELECT ステートメントに必要なデータはページの適切なコピーから読み取ることができます。Read Committed を確認するために、S ロックを取得する必要はありません。したがって、SQL Server Compact Edition では SELECT ステートメントに NOLOCK が使用されますが、データは Read Committed の分離レベルで読み取られます。SQL Server Compact Edition でダーティ リード (Read Uncommitted) が発生することはありません。
メモ : |
---|
NOLOCK ヒントは、Sch-S ロックまたは Sch-X ロックに影響しません。 |
参照
概念
ロックについて
トランザクション分離レベル
ロックに関する情報の表示
ロック タイムアウト