TRANSACTION ISOLATION
LEVELでは、規定のトランザクションロックレベルを設定しますが、各SELECT、INSERT、UPDATE、DELETE
文でロックの種類を指定することができます。これらのロック ヒントは、セッションの現在のトランザクション分離レベルより優先します。
例:
USE pubs
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
SELECT au_lname FROM authors WITH (NOLOCK)
ここでの SELECT * FROM xyz WITH (ロックのヒント)では、次のロックのヒントを与えることができます。
| ロックのヒント |
説明 |
| NOLOCK |
ダーティ リードが可能です。SELECT
ステートメントにだけ適用されます。 |
| READUNCOMMITTED |
NOLOCK と同じ。 |
| PAGLOCK |
通常はテーブル、ページ単位のロック。 |
| READCOMMITTED |
READ COMMITTED と同じ。
SQL Serverの規定値。 |
| READPAST |
ロックされた行をスキップします。SELECT
ステートメントにだけ適用されます。 |
| REPEATABLEREAD |
REPEATABLE READ と同じ。 |
| ROWLOCK |
行レベルのロック。 |
| SERIALIZABLE |
SERIALIZABLE
の分離レベルで動作するトランザクションと同じロック セマンティクスでスキャンを実行します。HOLDLOCK
に相当します。 |
| HOLDLOCK |
SERIALIZABLE
と同じです。トランザクションの完了時まで保持します。 |
| TABLOCK |
テーブル レベルのロック。SQL Server
はステートメントの終了まで保持する。 |
| TABLOCKX |
テーブルに排他ロックを使用。このロックは、ほかのユーザーがテーブルを読み込んだり更新したりすることを防止し、ステートメントまたはトランザクションの終了まで維持されます。 |
| UPDLOCK |
テーブルの読み出しの間、共有ロックの代わりに更新ロックを使用し、ステートメント終了またはトランザクション終了まで保持します。UPDLOCK
には、ほかのユーザーがデータを読むことをブロックせずにデータを読み取ることができます。また、読み取り以来データは変更されていないという保証があるため、後にそのデータを更新できるという利点があります。 |
| XLOCK |
トランザクションの終了まで保持される排他ロックを使用する。このロックは、PAGLOCK または TABLOCK
で指定できます。 |