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
で指定できます。 |