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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » トランザクションと独立性レベル » ロックの仕組み

 

削除時のロック

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

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

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

    1. 更新の候補となるローを識別します。ローがスキャンされている間は、ローはロックされます。

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

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

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

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

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

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

 参照