[英]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.