MySQL RR和RC隔离级别区别

Posted _雪辉_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL RR和RC隔离级别区别相关的知识,希望对你有一定的参考价值。

MySQL相对于其他数据库来讲,隔离级别是RR,而不是RC

  • RR 支持next-key lock,而RC则没有。因为mysql的RR需要gap lock来解决幻读问题。而RC隔离级别则是允许存在不可重复读和幻读的。所以RC的并发一般要好于RR;
  • RC 隔离级别,update语句通过 where 条件走非索引列过滤之后,不符合条件的记录上的行锁,会释放掉(虽然这里破坏了“两阶段加锁原则”);但是RR隔离级别,通过 where 条件走非索引列过滤之后,即使不符合where条件的记录,也是会加行锁。所以从锁方面来看,RC的并发应该要好于RR;可以减少一部分锁竞争,减少死锁和锁超时的概率。
  • RC 隔离级别不支持 statement 格式的bin log,因为该格式的复制,会导致主从数据的不一致;只能使用 mixed 或者 row 格式的bin log; 这也是为什么MySQL默认使用RR隔离级别的原因。
  • RC隔离级别时,事务中的每一条select语句会读取到他自己执行时已经提交了的记录,也就是每一条select都有自己的一致性读ReadView; 而RR隔离级别时,事务中的一致性读的ReadView是以第一条select语句的运行时,作为本事务的一致性读snapshot的建立时间点的。

以上是关于MySQL RR和RC隔离级别区别的主要内容,如果未能解决你的问题,请参考以下文章

记一个mysql环境RR隔离级别转换成RC的问题

mysql 事物隔离级别rr还是rc好

MySQL的RR和RC事务隔离级别加锁类型验证

MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?

MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?

MySQL 默认隔离级别是RR,为什么阿里这种大厂会改成RC?