示例
示例
BEGIN;
SELECT * FROM jobs
WHERE state = 'queued'
ORDER BY id
LIMIT 1
FOR UPDATE; -- 排他锁
UPDATE jobs SET state = 'running' WHERE id = ...;
COMMIT;| FOR UPDATE | 排他锁:其它事务的锁读与写会等待 |
|---|---|
| FOR SHARE | 共享锁:MySQL 8 取代 LOCK IN SHARE MODE;PG 同名 |
| 前提 | 必须在事务内;autocommit 下语句结束即释放锁 |