条件更新(原子且幂等)
条件更新(原子且幂等)
-- 风险:先查余额再扣减,两步之间可能被并发穿插
-- 修复:条件更新一条语句完成
UPDATE account SET balance = balance - 100
WHERE id = 1 AND balance >= 100;
-- 影响行数为 0 表示余额不足,直接拒绝本次请求其他手段
其他手段
唯一索引防重复记录(同一用户同一活动仅一条)
SELECT ... FOR UPDATE 行锁(注意锁范围与死锁风险)
分布式场景用队列或幂等服务串行化处理复现并发问题需要并发请求工具(ab、wrk 或自定义脚本),单次点击无法暴露。