参考:https://www.cnblogs.com/rjzheng/p/10510174.html
简写,RR:可重复读(Repeatable Read) ,RC:不可重复读(Read Commited)
mysql默认的隔离级别:RR
疑问:
- 为什么项目一般使用RC?
原因:
1)RR使用了间隙锁,会使死锁的概率增大
2)在RR隔离级别下条件列未命中索引会导致锁表!而在RC隔离级别下,只锁行。 - 为啥mysql的默认隔离级别是RR?
binlog的三种格式:
statement:记录的是修改的SQL语句
row:记录的是每行实际数据的变更
mixed:statement和row模式的混合
1)Mysql在5.0这个版本以前,binlog只支持statement这种格式!而这种格式在读已提交(Read Commited)这个隔离级别下主从复制是有bug的,因此Mysql将可重复读(Repeatable Read)作为默认的隔离级别!
2)RC隔离级别下,用的binlog为row格式,是基于行的复制!Innodb的创始人也是建议binlog使用该格式! - 在RC级别下,不可重复读问题需要解决么?
不用解决,这个问题是可以接受的!毕竟你数据都已经提交了,读出来本身就没有太大问题!Oracle的默认隔离级别就是RC,你们改过Oracle的默认隔离级别么?