关系型数据库Isolation Level
隔离级别 是什么?
读未提交 / 读已提交 / 可重复读 / 串行化,越往后越安全越慢
类比:会议室的玻璃,从透明到磨砂到独立隔间
四个级别与解决的问题
每提升一级,解决一种并发问题,代价是多加锁或更多版本维护。
- 读未提交:能读到别人未提交的数据,会脏读
- 读已提交:解决脏读,但同一事务两次读可能不一样(不可重复读)
- 可重复读:MySQL 默认,靠 MVCC 保证事务内快照一致
- 串行化:读也加锁,完全避免幻读,并发最差
MySQL 的幻读
标准定义里可重复读仍有幻读(两次范围查询行数不同)。InnoDB 用 Next-Key Lock(记录锁 + 间隙锁)在「当前读」(for update、update)时避免幻读,快照读则靠 MVCC。
怎么选
绝大多数业务用默认的可重复读。如果从 Oracle 迁移过来,注意 Oracle 默认是读已提交,行为会有差异;金融对账场景可考虑串行化但一定要压测。