MySQL默认事务隔离级别是可重复读(REPEATABLE READ),因其通过MVCC和间隙锁在保障脏读、不可重复读防护的同时兼顾并发性能,适合电商库存、财务对账等强一致性核心场景。

MySQL 支持四种事务隔离级别,按隔离强度从低到高依次是:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)、串行化(SERIALIZABLE)。它们的核心区别在于对并发问题的控制能力——脏读、不可重复读和幻读,以及由此带来的性能与一致性的权衡。
读未提交:能读到别人还没提交的数据
这是最低的隔离级别,事务可以读取其他事务尚未提交的修改。虽然并发性能最高,但风险极大:
- 允许脏读:比如事务 A 修改了余额但还没提交,事务 B 就读到了这个“2000”,结果 A 回滚了,B 读的其实是无效数据
- 不可重复读和幻读也都存在
- 实际生产环境极少使用,仅限临时数据分析或压测场景
读已提交:只读已落地的改动
事务只能看到其他事务已经提交的数据,Oracle 和 SQL Server 默认用这个级别:
- 解决了脏读,但同一事务内两次 SELECT 可能返回不同结果(因为中间有别的事务提交了 UPDATE)
- 范围查询仍可能遇到新插入的记录(幻读)
- 适合对实时性要求高、能容忍短时不一致的业务,比如订单状态查询、日志检索
可重复读:MySQL InnoDB 默认级别
这是 MySQL 最常用也最典型的隔离级别,靠 MVCC(多版本并发控制)+ 间隙锁(Next-Key Lock)实现:
- 事务启动时生成一致性视图,整个事务期间读到的数据快照不变
- 彻底避免脏读和不可重复读;对大多数幻读场景(如普通 SELECT)也做了防护
- 但若使用当前读(如 SELECT ... FOR UPDATE 或 UPDATE 带条件),仍需注意间隙锁覆盖范围,否则可能漏锁导致幻读
- 电商库存扣减、财务对账等强一致性核心链路普遍采用此级别
串行化:所有事务排队执行
最高隔离级别,通过强制加锁(如范围锁、表级锁)让事务完全串行化:
- 彻底杜绝脏读、不可重复读、幻读三类问题
- 代价是并发能力大幅下降,TPS 显著降低,响应延迟上升
- 仅建议用于极少数对数据零误差要求的场景,例如银行核心账务核销、监管报送批处理










