首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用'SELECT FOR UPDATE‘锁定一组行

如何使用'SELECT FOR UPDATE‘锁定一组行
EN

Stack Overflow用户
提问于 2020-11-29 07:22:51
回答 1查看 313关注 0票数 2

我有一个包含需要处理的任务的'jobs‘表。

一组工作者可以使用像SELECT * FROM jobs WHERE status='new' LIMIT 1 FOR UPDATE SKIP LOCKED这样的简单查询逐个并行处理行。

但我需要的是锁定由单个工人链接到单个人的所有行。

类似这样的代码可以完成SELECT * FROM jobs WHERE status='new' GROUP BY person_id LIMIT 1 FOR UPDATE SKIP LOCKED的工作,但是锁定不适用于聚合函数。

在使用子查询SELECT * FROM jobs WHERE person_id in (SELECT person_id FROM jobs WHERE status='new' LIMIT 1 FOR UPDATE SKIP LOCKED) FOR UPDATE SKIP LOCKED的情况下,我不能保证所有行都会被相同的线程锁定。

锁定'person‘表中的’person‘行,而不是job,这不是一个可取的解决方案,因为这个表也被其他进程使用。

如果有简单的方法,请指教。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-29 07:49:12

您可以使用advisory locks来以独占方式锁定"person“实体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65055437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档