日期:2026-07-11
难度:简单
标签:#面试 #MySQL #InnoDB #隔离级别
一句话答案
MySQL InnoDB 默认是可重复读(REPEATABLE READ):它在普通读场景利用 MVCC 保持同一事务内结果稳定,同时仍有较好的并发;对锁定读再配合 next-key lock 抑制幻读。
面试口语版
InnoDB 默认选 RR 是一个平衡:比 RC 多提供同一事务内可重复读取的语义,避免业务先查后改、同事务多次读取出现前后不一致;又不像 Serializable 那样让普通读大量阻塞。它不是只靠锁,而是普通 SELECT 用 Read View 做快照读,范围更新或 FOR UPDATE 这类当前读用 next-key lock 防止新记录插入锁定范围。实际项目也常按兼容性、并发模型和死锁表现选 RC,不能机械地认为 RR 永远最佳。
关键细节
- 检查:
SELECT @@transaction_isolation;;全局和会话配置可能被修改。 - RR 下同事务内第一次一致性读建立快照;自己的写入对自己始终可见。
- MySQL 的 RR 语义和其他数据库实现细节不完全相同。
面试官追问
- 默认 RR 还会有幻读吗?
- 为什么有些系统会改为 RC?
- RC 下锁范围有什么变化?
学习清单
- 避免回答“RR 完全没有幻读”,要区分快照读与当前读。