直接回答:SQL 标准四级:读未提交(RU)——能读到别人未提交的数据,存在脏读;读已提交(RC)——只读已提交数据,解决脏读但同一事务内两次读可能不同(不可重复读);可重复读(RR)——事务内多次读结果一致,InnoDB 默认级别,靠 MVCC 快照加临键锁也基本解决幻读;串行化——读写加锁,完全隔离但并发最低。
展开解析:并发异常对照:脏读(读到未提交)、不可重复读(同事务两次读值不同,因别人改了)、幻读(两次范围查询行数不同,因别人插入)。InnoDB 实现:
- RC 和 RR 靠 MVCC:RC 每次 SELECT 生成新 ReadView,RR 在事务首次读时生成并复用。
- RR 下当前读(SELECT ... FOR UPDATE、UPDATE)通过 next-key 锁阻止别的事务在范围内插入,从而防幻读。
- 注意"基本解决":RR 下快照读与当前读混用的特殊场景仍可能见幻影行。
选型建议:互联网常用 RC(减少 gap lock 死锁、binlog row 格式下安全);金融强一致场景视需要升到串行化局部使用。
追问方向:MVCC 的 ReadView 机制、快照读与当前读区别。