01 · DATA MODELINGP013 MIN
乐观锁与并发更新
识别“最后写入覆盖前者”的并发风险,并用版本条件阻止静默丢数据。
MENTAL MODELCONCURRENCY CONTROL
01读取 version 7
→02提交 WHERE version=7
→03更新为 8
→04冲突则刷新
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
Optimistic Lock
更新时同时匹配 id 与 version,成功后 version + 1;匹配不到说明数据已变化。
Pessimistic Lock
在事务内锁住目标行,其他写入等待,适合短时间高冲突临界区。
Lost Update
两个用户读同一版本后先后覆盖,前一次修改无提示消失。
两名销售同时修改报价
A 改折扣,B 改数量;B 最后保存时把 A 的折扣覆盖回旧值。
- 01
Quote 增加 version。
- 02
更新条件包含旧 version。
- 03
冲突返回 409,并展示最新值让用户决定合并。
系统不再静默丢失修改,冲突被转成可解释的业务交互。
马上动手
- 写出 version 条件更新伪 SQL。
- 区分编辑报价与扣减库存分别适合哪种并发策略。
常见坑
- 冲突后自动覆盖重试
- 把乐观锁等同数据库事务
- 所有场景都用行锁
05 · KNOWLEDGE CHECK库存扣减能否只靠前端禁用重复点击?查看答案⌄
答案
不能;多个客户端和重试仍会并发。应由数据库条件更新、锁或原子语句保证不变量。