下面是对 MySQL 中 RC(Read Committed)模式和 RR(Repeatable Read)模式更为细化的解释,主要从读取视图、MVCC 实现、锁机制、并发性、幻读防止等角度详细说明两者的区别与优缺点。
1. 读取视图及一致性
RC 模式(Read Committed)
- 读取行为:
- 每个 SQL 语句在执行时会获取一个最新的已提交数据快照。
- 也就是说,同一事务内的不同 SQL 语句在读取时可能看到不同的数据状态(如果其他事务在中间提交了更改)。
- 结果一致性:
- 能防止脏读(不读取未提交数据),但可能出现不可重复读和幻读。
- 例如,事务 T1 先执行一次 SELECT 得到一组数据;随后 T2 更新了部分数据并提交,再次执行 SELECT 时,T1 得到的数据会发生变化。
RR 模式(Repeatable Read)
- 读取行为:
- 事务启动时创建一个全局一致性快照(通过 MVCC 机制实现),该快照在整个事务中保持不变。
- 事务 T1 内所有的 SQL 查询都基于事务启动时的数据状态,即使其他事务在执行期间提交了更改,也不会影响 T1 的查询结果。
- 结果一