mysql>update users set c_note='t1' where c_id in (select c_id from class);
2
mysql>set autocommit=0;
mysql>delete from class where c_id=2;
mysql>commit;
3 mysql>update users set c_note='t2' where c_id in (select c_id from class);
4 commit;
因为binlog是凭据commit时间的顺序生存,因此上述步调在binlog里会以如下顺序存储:
binlog里的顺序 语句内容1
delete from class where c_id=2;
2 update users set c_note='t1' where c_id in (select c_id from class);
3 update users set c_note='t2' where c_id in (select c_id from class);
从库通过binlog应用后,最终的功效将导致主库的数据纷歧样(详细案例后续安装低版本后演示)。
因而,此种场景下很容易导致数据纷歧样。
4、总结通过上述的实践,可以发此刻RR级别下,binlog为任何名目均不会造成主从数据纷歧致的环境呈现,可是当低版本MySQL利用RC+STATEMENT组适时(MySQL5.1.5前只有statement名目)将会导致主从数据纷歧致。当前这个汗青漏掉问题以及办理,各人可以将其配置为RC+ROW组合的方法(譬喻Oracle等数据库断绝级别就是RC),而不是必需利用RR(会带来更多的锁期待),详细可以视环境选择。