锁定选定的行直到更新操作

lock the selected rows until update operation

我可以锁定特定的 selected 行直到更新完成吗?

我们已经编写了查询 selecting 来自 Java (CrudRepository) 的行并处理它们然后更新

问题是:- 如果有两个请求,并且我有 2 行可用于请求的条件,那么当前同一行由 select 对两个请求的查询 select 编辑。我们的期望是 select 不同的行而不是 select 相同。

如果您希望 SELECT 锁定 selected 行,并且您不希望两个并发查询 select 相同的行,请使用:

SELECT ... FROM atable
WHERE ...
FOR UPDATE SKIP LOCKED;

然后第一个查询将获取并 select 所有满足 WHERE 条件的行,而第二个查询什么也看不到。

两条评论:

  1. 您需要使用同时包含SELECTUPDATE的事务,因为锁在事务结束时释放。

  2. 您可以在 SELECT 到 select 中添加一个 LIMIT 子句并锁定特定的最大行数。