Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » トランザクションと独立性レベルの使用 » ロックの仕組み

 

削除時のロック

DELETE オペレーションは、INSERT オペレーションとほとんど同じ手順を実行しますが、その順序は反対になります。挿入時や更新時と同様に、独立性レベルに関係なくすべてのトランザクションで次の操作手順が発生します。

  1. テーブルで共有スキーマ・ロックを保持していない場合は、取得します。

  2. テーブルで書き込みを意図したテーブル・ロックを保持していない場合は、取得します。

    1. 更新の候補となるローを識別します。ローがスキャンされている間は、ローはロックされます。デフォルトのロック動作については、独立性レベルと一貫性を参照してください。

      独立性レベル 2 と 3 では、デフォルトのロック動作とは異なる次のような違いが発生します。読み込みロックではなく書き込みを意図したローレベルのロックが取得されます。また、書き込みを意図したロックは、更新の候補としては最終的には拒否されたローで取得される場合があります。

    2. 手順 2.a で識別された候補となる各ローは、残りのシーケンスに従います。

  3. 削除するローに書き込みロックをかけます。

  4. 他のトランザクションから見えなくなるように、ローをテーブルから削除します。ローは、トランザクションがコミットされるまで破壊できません。ローを破壊すると、トランザクションをロールバックするオプションが削除されてしまうからです。削除されたローのインデックス・エントリはトランザクションの完了まで残りますが、削除済みのマークが付けられます。これにより、他のトランザクションは同じローを再挿入できません。

  5. テーブルが参照整合性関係においてプライマリ・テーブルであり、かつ関係の DELETE アクションが RESTRICT でない場合、外部テーブル (間) で共有スキーマ・ロックを、各外部テーブルで書き込みを意図したテーブル・ロックをそれぞれ取得することで、外部テーブル内で影響のあるローを特定し、次に影響のあるすべてのローで書き込みロックを取得して、必要に応じてそれぞれのローを修正します。このプロセスは、参照整合性制約のネストした階層でカスケードされることがあります。

参照整合性に違反しない場合は、トランザクションをコミットできます。参照整合性を調べるために、データベース・サーバは削除によって作成されたオーファンを追跡します。COMMIT の実行時、サーバはオペレーションをトランザクション・ログ・ファイルに記録し、すべてのロックを解放します。