本文介绍FOR UPDATE子句。
语法
FOR UPDATE [WAIT n|NOWAIT|SKIP LOCKED]
说明
FOR UPDATE
会使 SELECT
语句所检索的行被锁定,就像在进行更新一样。这可以防止其他事务在当前事务结束前修改或删除行;任何尝试 UPDATE
、DELETE
或 SELECT FOR UPDATE
选定行的事务都将被阻止,直到当前事务结束。如果来自另一个事务的 UPDATE
、DELETE
或 SELECT FOR UPDATE
已锁定一个或多个选定行,则 SELECT FOR UPDATE
将等待第一个事务完成,然后锁定并返回更新的行(如果行已删除,则不返回任何行)。
FOR UPDATE
不能用于无法使用单个表行(例如,使用聚合)明确标识返回行的上下文中。
使用 FOR UPDATE
选项可以指定锁定首选项:
- 包含
WAIT n
关键字可指定SELECT
语句将等待另一个会话锁定的行的秒数(或秒的小数部分)。使用小数形式指定秒的小数部分;例如,WAIT 1.5
指示服务器等待 1.5 秒。最多指定小数点右边的 4 位数。 - 包含
NOWAIT
关键字可在当前会话无法锁定行时立即报告错误。 - 包含
SKIP LOCKED
指示服务器在可能的情况下锁定行,并跳过已被另一个会话锁定的行。