MySQL 中的事务隔离级别有哪些?

📅 2026/8/24 13:21:37
MySQL 中的事务隔离级别有哪些?
MySQL 中的事务隔离级别有哪些SQL标准定义4种事务隔离级别InnoDB全部支持MySQL默认是可重复读 RR。隔离级别由低到高读未提交 → 读已提交 → 可重复读 → 串行化。三种并发问题脏读、不可重复读、幻读脏读一个事务读到另一个事务未提交的数据如果对方回滚读到的数据就是脏数据。不可重复读同一个事务内同一条SQL多次执行读到的数据不一样。别的事务提交修改本事务读到新数据。重点是数据内容发生变化。幻读同一个事务同样的查询前后返回的行数不一样。别的事务插入/删除数据本事务出现凭空多出或者少行重点是行数变化。四个隔离级别1. Read Uncommitted 读未提交可以读取其他事务还没有提交的数据会出现脏读、不可重复读、幻读几乎不会线上使用2. Read CommittedRC读已提交只能读到其他事务已经提交的数据解决脏读存在不可重复读、幻读MVCC行为每次select都生成新的ReadView很多互联网项目会把隔离级别改成RC锁冲突更少并发更高。3. Repeatable ReadRR可重复读MySQL InnoDB默认级别同一个事务内部多次读取读到的数据始终是事务启动时的快照解决脏读、不可重复读SQL标准中RR还存在幻读MySQL的InnoDB通过 MVCC 间隙锁临键锁解决了幻读MVCC行为事务第一次select才生成ReadView整个事务复用同一个视图4. Serializable 串行化最高隔离级别所有普通select隐式转为select ... share mode全部加共享锁全部问题都解决脏读、不可重复读、幻读事务串行执行并发能力极差几乎不用。隔离级别脏读不可重复读幻读读未提交存在存在存在读已提交RC不存在存在存在可重复读RR不存在不存在InnoDB已解决串行化不存在不存在不存在补充面试高频考点Oracle默认隔离级别是RCMySQL InnoDB默认RR。RC级别没有间隙锁只有行锁RR级别才会产生间隙锁、临键锁用来解决幻读。隔离级别越高并发性能越差级别越低并发越高但数据一致性问题越多。总结一共4种隔离级别读未提交、读已提交RC、可重复读RR、串行化MySQL默认RRRC每次查询生成ReadViewRR事务首次查询生成ReadViewInnoDB在RR下依靠MVCC临键锁解决幻读隔离级别越高一致性越好并发性能越低。