構文
FOR UPDATE [WAIT n|NOWAIT|SKIP LOCKED]
説明
FOR UPDATE
句により、SELECT
文によって取得される行がロックされます。 これにより、現在のトランザクションが終了するまで、他のトランザクションによって行が変更または削除されるのを防ぎます。 選択した行に対して
UPDATE
、DELETE
、または SELECT FOR UPDATE
文を実行しようとするすべてのトランザクションは、現在のトランザクションが終了するまでブロックされます。 別のトランザクションからの UPDATE
、DELETE
、または 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
を付加すれば、可能な場合に行をロックし、別のセッションによって既にロックされている行をスキップするように、サーバーに指示します。