Yihui’s Blog

MySQL 默认的事务隔离级别是什么?为什么选择这个级别?

日期: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 语义和其他数据库实现细节不完全相同。

面试官追问

  1. 默认 RR 还会有幻读吗?
  2. 为什么有些系统会改为 RC?
  3. RC 下锁范围有什么变化?

学习清单

  • 避免回答“RR 完全没有幻读”,要区分快照读与当前读。
Maintained by · YihuiEdit on GitHub

Keep reading

View all posts