この文は、同時に実行されている他のトランザクションがテーブルをアクセスしたり、修正することを防止するために使用します。
LOCK TABLE table-name [ WITH HOLD ] IN { SHARE | EXCLUSIVE } MODE
table-name テーブルの名前。テーブルとして、ビューではなくベース・テーブルを指定してください。テンポラリ・テーブルのデータは現在の接続に固有のローカルなものであるため、グローバル・テンポラリ・テーブルまたはローカル・テンポラリ・テーブルでは、ロックは効力を持ちません。
WITH HOLD 句 この句は、接続が終了するまでテーブルをロックするときに指定します。この句を指定しない場合は、現在のトランザクションがコミットまたはロールバックされた時点でロックは解放されます。
SHARE MODE 句 この句は、テーブルの共有テーブル・ロックを取得して、他のトランザクションはテーブルを修正できないようにするが、読み込みアクセスは許可するときに指定します。トランザクションがテーブルに共有ロックをかけると、他のトランザクションが修正中のローにロックをかけていない場合に、テーブルのデータを変更できます。
EXCLUSIVE MODE 句 この句は、テーブルの排他テーブル・ロックを取得して、他のトランザクションがそのテーブルにアクセスできないようにするときに指定します。他のトランザクションは、クエリ、更新を含め、テーブルに対するどのようなアクションも実行できません。LOCK TABLE...IN EXCLUSIVE MODE
などの文を使用してテーブルを排他的にロックすると、デフォルトの動作ではテーブルのロー・ロックを取得しません。subsume_row_locks オプションを Off に設定すると、この動作を無効にできます。
LOCK TABLE 文によって、現在の独立性レベルに関係なく、同時実行性をテーブル・レベルで直接制御できます。
トランザクションの独立性レベルは、現在のトランザクションが要求を実行するときに設定されるロックを制御しますが、LOCK TABLE 文では、もっと明示的にテーブル内のローのロックを制御できます。
ビューに対しては LOCK TABLE 文を実行できません。ただし、ベース・テーブルに対して LOCK TABLE 文を実行すると、共有スキーマ・ロックが作成され、このロックによって従属ビューがロックされます。共有スキーマ・ロックは、トランザクションがコミットされるか、またはロールバックされるまで継続します。
SHARE モードのテーブルをロックするためには、SELECT 権限が必要です。
EXCLUSIVE モードでテーブルをロックするためには、そのテーブルの所有者であるか、DBA 権限が必要です。
ロックされたテーブルへのアクセスが必要な他のトランザクションは、遅延またはブロックされます。
SQL/2003 ベンダ拡張。
次の文は、現在のトランザクションの実行中は、他のトランザクションに対して Customers テーブルの修正を禁止します。
LOCK TABLE Customers IN SHARE MODE; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |