如何解决锁定选定的行,直到进行更新操作
我可以锁定特定的选定行,直到更新完成。
我们编写了查询,用于从Java(CrudRepository)中选择行并进行处理,然后进行更新
问题是:-如果两个请求到来,而我有2行可用于所请求的条件,那么select查询会为两个请求选择当前相同的行。我们的期望是选择不同的行而不是选择相同的行。
解决方法
如果您希望SELECT
锁定选定的行,并且不希望两个并发查询选择相同的行,请使用以下方法:
SELECT ... FROM atable
WHERE ...
FOR UPDATE SKIP LOCKED;
然后,第一个查询将提取并选择所有符合WHERE
条件的行,而第二个查询将什么也看不到。
两条评论:
-
您需要使用同时包含
SELECT
和UPDATE
的事务,因为锁是在事务结束时释放的。 -
您可以在
LIMIT
上添加SELECT
子句,以选择并锁定一定数量的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。