我目前在表上使用SELECT FOR UPDATE NOWAIT
来阻止多个线程执行相同的查询。在执行的同时,另一个线程可能在同一个表的某些行上运行UPDATE
个查询。
这两个查询之间的确切交互是什么? UPDATE
查询是否会返回异常,还是会阻止SELECT FOR UPDATE NOWAIT
完成?
答案 0 :(得分:2)
当您使用SELECT FOR UPDATE NOWAIT时,任何其他并发选择的候选集与至少一个相同行匹配的更新或更新将需要等到行级别锁定被释放或不确定。
如果您使用另一个select for update而不是update,则可以使用nowait或skip locked子句来修改此默认行为。