如何使用"选择更新"锁定一组行



我有一个包含需要处理的任务的"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的情况下,我不能保证所有行都会被同一线程锁定。

锁定"persons"表中的"person"行而不是作业不是一个更好的解决方案,因为其他进程也在使用此表。

如果有一个简单的方法可以做到这一点,请提供建议。

您可以使用顾问锁来独占锁定一个"人;实体

最新更新