本文介绍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指示服务器在可能的情况下锁定行,并跳过已被另一个会话锁定的行。