日期:2026-07-11
难度:中等
标签:#面试 #MySQL #事务 #隔离级别 #生产实践 #VIP
一句话答案
示例口径:生产保持 InnoDB 默认的 RR,利用一致性快照保证事务内重复读取稳定,并通过短事务、唯一约束和条件更新保证业务正确;若锁冲突与范围锁是主要瓶颈,也会评估 RC。
面试口语版
这题要按真实项目回答。一个安全示例是:我们使用 REPEATABLE READ,因为核心交易在同一事务内有多次读取,希望结果基于稳定快照;团队也熟悉 InnoDB 在 RR 下的 MVCC 和 next-key lock 行为。业务正确性不只依赖隔离级别,库存使用带条件 UPDATE,唯一性使用唯一索引,事务尽量短并做死锁重试。如果系统写并发很高、范围锁和死锁明显,而业务允许每条语句看到最新已提交数据,会经过压测后改用 READ COMMITTED。修改前必须验证所有先查后写逻辑。
原理拆解
| 选择 | 优势 | 风险/要求 |
|---|---|---|
| RR | 同事务快照稳定;MySQL 默认 | next-key lock 可能扩大锁范围 |
| RC | 每次语句读最新已提交;间隙锁通常更少 | 同事务两次读可能不同 |
关键细节
- 不要声称“RR 完全没有幻读”,应区分快照读和当前读。
- 隔离级别不能替代唯一约束、幂等、条件更新和正确锁定。
- 可用
SELECT @@transaction_isolation核对实际会话配置,不能只看配置文件。
面试官追问
- RC 与 RR 的 Read View 创建时机有何不同?
- 为什么 RC 可能减少死锁?
- 如何防止库存超卖?
高分补充
回答“为什么”时给出业务不变量、冲突模型和压测数据,比只说“因为这是默认值”更有说服力。
学习清单
- 将本文口径替换为自己的真实项目选择和案例。