重新建设网站的请示谷歌google 官网下载
MySQL默认为RR级别
首先默认RR是因为mysql为了保证在主从同步过程中数据的安全的问题(涉及到binlog三种格式)。
就是说两个并发事务数AB,A先开启事物最后提交也是最后,事务B开启和提交都在A内部,由于隔离级别不同(RR和RC)会导致数据执行的顺序不同,数据结果就不同。主从同步过程binlog如果为statement格式(statement格式的bin log记录就是SQL语句原句)就有出现问题。以至于后来官方规定了这个格式下不允许设置为RC级别。而RR得到解决是又加了GAP锁和临键锁使得必须得大事务A提交或者回滚了才能执行里面的小事务B。
RR和RC隔离级别的主要区别
隔离级别改为RC级别,主要是可以提升并发度、降低发生死锁的概率。
RC的锁更少只有锁记录,而且支持“半一致读”,感兴趣可详细查看书籍。
一致性读
RR在select读只生成一次快照读,RR都重新生成保证读的数据是最新的
锁机制
RR支持三种锁(为了解决幻读的问题,支持Record Lock的同时,还支持Gap Lock和Next-Key Lock)。
RC只支持一种(只会对索引增加Record Lock)
binlog格式支持程度
MySQL的binlog主要支持三种格式,分别是statement、 row、mixed
RC 只支持row格式的binlog。不支持statement格式。
(如果指定了mixed作为 binlog 格式,会自动使用row 格式的日志记录)
RR 三种都支持。