UPDATE
如果它尝试更改的记录被另一个进程锁定(而不是等待锁定被释放),是否可以编写一个简单退出的查询?
我有一个应该更新表中记录的过程,有时这些记录被锁定。更新这些记录是可取的,但不是必需的。如果记录正在使用中,我宁愿我的过程只是忘记更新并转移到更重要的事情上。
我目前的方法是将命令超时设置为 1 秒,但即使这比我想等待的时间还要长 - 正常更新需要几分之一毫秒,所以等待一秒是一个主要开销。
UPDATE
如果它尝试更改的记录被另一个进程锁定(而不是等待锁定被释放),是否可以编写一个简单退出的查询?
我有一个应该更新表中记录的过程,有时这些记录被锁定。更新这些记录是可取的,但不是必需的。如果记录正在使用中,我宁愿我的过程只是忘记更新并转移到更重要的事情上。
我目前的方法是将命令超时设置为 1 秒,但即使这比我想等待的时间还要长 - 正常更新需要几分之一毫秒,所以等待一秒是一个主要开销。
您可以在使用以下方法进行更新之前手动锁定该行:
如果无法获得锁,这将引发错误。
SKIP LOCKED
可能会为您提供最好的服务。手册:
在您的情况下,
SELECT
过滤器恰好是一行。如果它被锁定,它会被跳过,什么也不会发生。与 的本质区别
NOWAIT
:没有引发错误,操作被静默跳过。这可能最适合您的情况。您也可以通过这种方式更新多行(使用
IN
而不是=
)。任何锁定的行都被跳过,其余的被更新。使用时,引发的错误将阻止NO WAIT
整体。UPDATE
(除非您发现异常,否则整个事务都会回滚。)有关的: