| 用途 | 悲观锁读取 |
|---|---|
| 语句 | SELECT … FOR UPDATE / FOR SHARE |
| 要点 | 必须在事务内、条件走索引 |
库存扣减范式
库存扣减范式
START TRANSACTION;
SELECT qty FROM stock WHERE sku='SKU-1' FOR UPDATE;
UPDATE stock SET qty = qty - 1 WHERE sku='SKU-1' AND qty > 0;
COMMIT;跳过已锁行(8.0)
跳过已锁行(8.0)
SELECT id FROM jobs WHERE status='ready' ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED;FOR UPDATE 无索引条件会锁大量行甚至全表;等锁超时受 innodb_lock_wait_timeout 限制(默认 50 秒)。