美文网首页
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