簡體   English   中英

如何使用“SELECT FOR UPDATE”鎖定一組行

[英]How to lock a group of rows with 'SELECT FOR UPDATE'

我有一個需要處理的任務的“工作”表。

一組工作人員可以使用像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' 行而不是 job 不是一個可取的解決方案,因為該表也被其他進程使用。

如果有一種簡單的方法可以做到這一點,請提出建議。

您可以使用咨詢鎖來獨占鎖定“人”實體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM