后端完整解析阿里云 MySQL

事务隔离级别有哪些?

需同时回答 SQL 标准现象、MySQL 默认级别、一致性读和锁定读,避免宣称某级别绝对没有任何幻读。

面试后端互联网公司面经互联网大厂阿里云database核心题完整解析编辑精选

直接结论

四个常见隔离级别是 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE,隔离越强通常并发代价越高。MySQL InnoDB 默认是 REPEATABLE READ。脏读、不可重复读和幻读是描述并发可见性的现象,但回答 InnoDB 时要区分快照一致性读与锁定读:REPEATABLE READ 的一致性读依赖事务快照,锁定范围查询则结合记录锁、间隙锁或 next-key 锁抑制其他事务在范围内插入。

原理与步骤

READ UNCOMMITTED 可能读取未提交更改;READ COMMITTED 的每个一致性读通常读取该语句开始前已提交的数据,因此同一事务两次查询可能不同;REPEATABLE READ 通常复用首次一致性读形成的快照;SERIALIZABLE 在更强约束下使并发更接近串行。隔离级别不只是“能看见什么”,还影响 InnoDB 的加锁方式。快照读看到相同结果不代表数据库阻止了其他事务插入,只是旧快照暂时不可见。

工程场景

库存或名额预留不能仅依赖一次普通 SELECT 后再 INSERT,因为并发事务可能同时通过检查。可用唯一约束、原子条件更新、锁定读或按业务键串行化保证不变量。后台报表可能接受 READ COMMITTED 以减少长快照影响,而需要事务内稳定读取的流程可使用 REPEATABLE READ,但仍要控制事务长度。选择隔离级别应从业务不变量和冲突概率出发,并用约束兜底,而不是机械地把全库改成最高级别。

验证与边界

“REPEATABLE READ 彻底解决幻读”过于绝对:快照读的一致视图、当前读的锁范围、事务中混用两类读以及先后时序都会影响观察。SERIALIZABLE 也不等于零死锁,冲突时仍需重试。验证应以两个独立连接编排 begin、select、insert、commit,分别测试普通 SELECT 与 FOR UPDATE,并记录隔离级别。不要把其他数据库的实现细节套到 InnoDB,也不要忽略自动提交会让每条语句成为独立事务。

答题练习

  1. 1四级隔离与默认 RR
  2. 2快照读和锁定读分开解释
  3. 3业务约束不能只靠读取判断

常见错误

  • 绝对化宣称 RR 消灭所有幻读
  • 只背现象不讲实现和业务不变量

可能追问

  • next-key lock 在何时生效
  • 如何设计并发库存扣减

来源记录

原始来源
小林coding
来源页面
阿里云 Java 面试
最近收录
2026-07-05
官方复核
MySQL 官方文档