美文网首页
004-Mysql中隔离级别RC与RR的区别

004-Mysql中隔离级别RC与RR的区别

作者: 糖纸疯了 | 来源:发表于2021-12-22 09:15 被阅读0次

1. Mysql中隔离级别RC与RR的区别


2. 参考网址:



3.总结

  • RR 支持 gap lock(next-key lock),而RC则没有gap lock。因为MySQL的RR需要gap lock来解决幻读问题。而RC隔离级别则是允许存在不可重复读和幻读的。所以RC的并发一般要好于RR;
  • RC 隔离级别,通过 where 条件走非索引列过滤之后,不符合条件的记录上的行锁,会释放掉(虽然这里破坏了“两阶段加锁原则”);但是RR隔离级别,通过 where 条件走非索引列过滤之后,即使不符合where条件的记录,也是会加行锁。所以从锁方面来看,RC的并发应该要好于RR;可以减少一部分锁竞争,减少死锁和锁超时的概率。
  • RC 隔离级别不支持 statement 格式的bin log,因为该格式的复制,会导致主从数据的不一致;只能使用 mixed 或者 row 格式的bin log; 这也是为什么MySQL默认使用RR隔离级别的原因。复制时,我们最好使用:binlog_format=row
  • MySQL5.6 的早期版本,RC隔离级别是可以设置成使用statement格式的bin log,后期版本则会直接报错;

重点:简而言之:
1)RC隔离级别时,事务中的每一条select语句会读取到他自己执行时已经提交了的记录,也就是每一条select都有自己的一致性读ReadView;
2)而RR隔离级别时,事务中的一致性读的ReadView是以第一条select语句的运行时,作为本事务的一致性读snapshot的建立时间点的。只能读取该时间点之前已经提交的数据


4.查询示例

1)等值查询


2)范围查询


3)查询结果为空

相关文章

网友评论

      本文标题:004-Mysql中隔离级别RC与RR的区别

      本文链接:https://www.haomeiwen.com/subject/mxzxwltx.html