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 完全没有幻读”,要区分快照读与当前读。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文