Visual LabINTERACTIVE LEARNING
01 · DATA MODELINGP013 MIN

乐观锁与并发更新

识别“最后写入覆盖前者”的并发风险,并用版本条件阻止静默丢数据。

MENTAL MODELCONCURRENCY CONTROL
01读取 version 7
02提交 WHERE version=7
03更新为 8
04冲突则刷新
乐观锁允许大家先读取,但提交时必须证明“我修改的仍是我刚才看到的版本”。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

Optimistic Lock

更新时同时匹配 id 与 version,成功后 version + 1;匹配不到说明数据已变化。

02

Pessimistic Lock

在事务内锁住目标行,其他写入等待,适合短时间高冲突临界区。

03

Lost Update

两个用户读同一版本后先后覆盖,前一次修改无提示消失。

02 · BLIND BOTS CASE

两名销售同时修改报价

问题现场

A 改折扣,B 改数量;B 最后保存时把 A 的折扣覆盖回旧值。

  1. 01

    Quote 增加 version。

  2. 02

    更新条件包含旧 version。

  3. 03

    冲突返回 409,并展示最新值让用户决定合并。

得到什么

系统不再静默丢失修改,冲突被转成可解释的业务交互。

03 · PRACTICE

马上动手

  1. 写出 version 条件更新伪 SQL。
  2. 区分编辑报价与扣减库存分别适合哪种并发策略。
04 · PITFALLS

常见坑

  • 冲突后自动覆盖重试
  • 把乐观锁等同数据库事务
  • 所有场景都用行锁
05 · KNOWLEDGE CHECK库存扣减能否只靠前端禁用重复点击?查看答案⌄
答案

不能;多个客户端和重试仍会并发。应由数据库条件更新、锁或原子语句保证不变量。