本文介绍FOR UPDATE子句。

语法

FOR UPDATE [WAIT n|NOWAIT|SKIP LOCKED]

说明

FOR UPDATE 会使 SELECT 语句所检索的行被锁定,就像在进行更新一样。这可以防止其他事务在当前事务结束前修改或删除行;任何尝试 UPDATEDELETESELECT FOR UPDATE 选定行的事务都将被阻止,直到当前事务结束。如果来自另一个事务的 UPDATEDELETESELECT FOR UPDATE 已锁定一个或多个选定行,则 SELECT FOR UPDATE 将等待第一个事务完成,然后锁定并返回更新的行(如果行已删除,则不返回任何行)。

FOR UPDATE 不能用于无法使用单个表行(例如,使用聚合)明确标识返回行的上下文中。

使用 FOR UPDATE 选项可以指定锁定首选项:

  • 包含 WAIT n 关键字可指定 SELECT 语句将等待另一个会话锁定的行的秒数(或秒的小数部分)。使用小数形式指定秒的小数部分;例如,WAIT 1.5 指示服务器等待 1.5 秒。最多指定小数点右边的 4 位数。
  • 包含 NOWAIT 关键字可在当前会话无法锁定行时立即报告错误。
  • 包含 SKIP LOCKED 指示服务器在可能的情况下锁定行,并跳过已被另一个会话锁定的行。