Bootstrap

MySQL RC模式和RR模式的区别

下面是对 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 的查询结果。
  • 结果一
;