構文

FOR UPDATE [WAIT n|NOWAIT|SKIP LOCKED]

説明

FOR UPDATE 句により、SELECT 文によって取得される行がロックされます。 これにより、現在のトランザクションが終了するまで、他のトランザクションによって行が変更または削除されるのを防ぎます。 選択した行に対して UPDATEDELETE、または SELECT FOR UPDATE 文を実行しようとするすべてのトランザクションは、現在のトランザクションが終了するまでブロックされます。 別のトランザクションからの UPDATEDELETE、または SELECT FOR UPDATE 文が選択した行をすでにロックしていた場合、SELECT FOR UPDATE は前のトランザクションが完了するのを待機します。 その後、SELECT FOR UPDATE は更新された行をロックして返します。 行が削除された場合、SELECT FOR UPDATE では行をロックすることも返すこともしません。

FOR UPDATE では、返された行を個別のテーブル行として明確に識別することができないコンテキストでは使用できません。

FOR UPDATE オプションを使用して、ロックの詳細を指定できます。

  • WAIT n キーワードを付加して、SELECT 文で別のセッションによってロックされた行を待機する秒数を整数または小数形式で指定します。 DECIMAL 形式を使用して、小数点以下の秒数を指定します。 たとえば、 WAIT 1.5 では、サーバーに 1.5 秒待機するように指示します。 小数点以下 4 桁まで指定できます。
  • NOWAIT キーワードを付加すれば、現在のセッションで行をロックできない場合にすぐにエラーを返します。
  • SKIP LOCKED を付加すれば、可能な場合に行をロックし、別のセッションによって既にロックされている行をスキップするように、サーバーに指示します。