日期:2026-07-11
难度:简单
标签:#面试 #MySQL #事务 #隔离级别
一句话答案
从低到高是读未提交(RU)、读已提交(RC)、可重复读(RR)和串行化(Serializable);隔离越强,异常越少,通常并发代价越高。
原理拆解
| 级别 | 脏读 | 不可重复读 | 幻读 | InnoDB 常见实现 |
|---|---|---|---|---|
| RU | 可能 | 可能 | 可能 | 可读未提交版本 |
| RC | 不会 | 可能 | 可能 | 每次一致性读新 Read View |
| RR | 不会 | 不会 | 快照读避免;当前读靠锁控制 | 事务内复用 Read View + next-key lock |
| Serializable | 不会 | 不会 | 不会 | 强化锁定,读也可能阻塞 |
面试口语版
隔离级别本质是在一致性和并发之间取舍。RU 几乎不用;RC 是很多数据库常用级别,它避免脏读但同一事务两次查询可能不同;InnoDB 的 RR 通过 Read View 让普通一致性读可重复,并在锁定范围查询中用 next-key lock 控制幻读;Serializable 最严格,但并发最低。可以用 SET [SESSION] TRANSACTION ISOLATION LEVEL ... 设置会话级隔离级别。
关键细节
- 隔离现象和具体 SQL 有关;普通快照读、锁定读、更新语句行为不同。
- 事务隔离只是一层保证,业务仍需唯一约束、条件更新等保证业务正确性。
面试官追问
- RC 与 RR 的 Read View 差异?
- RR 如何处理当前读幻读?
- 哪些业务适合 RC?
学习清单
- 背下四级别顺序和三类读异常。