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 の使用法 » トランザクションと独立性レベル » ロックの仕組み » ローロック

 

意図的ロック

意図的ロックは更新を意図したロックとも呼ばれ、特定のローを修正する意図を表します。意図的ロックは、トランザクションが次の場合に取得されます。

  • FETCH FOR UPDATE 文を発行する。

  • SELECT...FOR UPDATE BY LOCK 文を発行する。

  • ODBC アプリケーションで SQL_CONCUR_LOCK を同時実行性の基準として使用する (SQLSetStmtAttr ODBC API 呼び出しの SQL_ATTR_CONCURRENCY パラメーターを使用して設定する)。

意図的ロックは、読み込みロックと競合しないため、意図的ロックを取得しても、他のトランザクションが同じローを読み込むことをブロックしません。ただし、意図的ロックは、他のトランザクションが同じローで意図的ロックまたは書き込みロックを取得することを妨げるため、更新に先立って他のトランザクションによってローが変更されることはありません。

スナップショットアイソレーションを実行するトランザクションによって意図的ロックが取得される場合とは、そのローがデータベースで未修正のローであり、かつすべての同時実行トランザクションに共通である場合に限られます。ただし、ローがスナップショットのコピーである場合は、元のローが別のトランザクションによってすでに修正されているため、意図的ロックは取得されません。スナップショットトランザクションによってそのローを更新しようとしても失敗となり、スナップショットの更新競合エラーが返されます。