示例
示例
-- 队列任务领取:多个 worker 并发不互相等待
BEGIN;
SELECT id FROM jobs
WHERE state = 'queued'
ORDER BY id
LIMIT 1
FOR UPDATE SKIP LOCKED;
-- ... 处理并更新 ...
COMMIT;| NOWAIT | 立即失败(MySQL 8.0.1+ / PostgreSQL 均支持) |
|---|---|
| SKIP LOCKED | 跳过锁定行,返回其余行 |
| 适用 | 任务队列、批量分发;不适用于需要完整一致快照的统计 |
锁读的两个变体:NOWAIT 拿不到锁立刻报错,SKIP LOCKED 跳过被锁行——后者是队列消费场景的常用模式。
-- 队列任务领取:多个 worker 并发不互相等待
BEGIN;
SELECT id FROM jobs
WHERE state = 'queued'
ORDER BY id
LIMIT 1
FOR UPDATE SKIP LOCKED;
-- ... 处理并更新 ...
COMMIT;| NOWAIT | 立即失败(MySQL 8.0.1+ / PostgreSQL 均支持) |
|---|---|
| SKIP LOCKED | 跳过锁定行,返回其余行 |
| 适用 | 任务队列、批量分发;不适用于需要完整一致快照的统计 |