前言
本文只讨论 MySQL InnoDB 的情况。
不可重复读
在一个事务中多次读取同一个数据时,结果出现不一致。
解决:在 MySQL InnoDB 中,Repeatable Read 隔离级别使用 MVCC 来解决不可重复读问题。
幻读
在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。
解决:在 MySQL InnoDB 中,Repeatable Read 隔离级别不存在幻读问题,对于快照读,InnoDB 使用 MVCC 解决幻读,对于当前读,InnoDB 通过 gap locks 或 next-key locks 解决幻读。
关于 MVCC 的更多内容可以查看 《MySQL 8.0 MVCC 核心原理解析(核心源码)》
推荐阅读