MySQL中RR隔离级别转换成RC隔离级别案例(2)

可以看到,执行方式和上面一致,右边的事务等待了12秒后执行了,也就是左边commit之后。但是,变成了不可重复读,右边事务里面没有commit也可以看到最新提交的数据,甚是诡异。

解决方法

第一种方案:将隔离级别改成RC貌似是可以解决问题,但是解决的是左边的问题,把可重复读的特性改成了不可重复读了而已。这样两边都能查到已经提交的新数据。

#更改mysql全局隔离级别为RC

set global tx_isolation = 'READ-COMMITTED'

改了之后,全局都变成了不可重复读,并且没有了间隙锁,也正因为可以看到已经提交的新数据,所以上面正常的情况也会跟下面一致,但是不代表有问题,这本身就是RC隔离级别的特点。

然后有人说,这不是没解决问题嘛,只是把问题全部改成一样而已,好像是这样。所以就有第二种方案。

第二种方案:把binlog格式改成ROW,不用改隔离级别,问题是真的解决了。

#把全局binlog格式改成ROW格式

set global binlog_format = 'ROW';

在上面看到原始的的binlog格式是MIXED混合模式,现在改成ROW模式,再试一遍。

MySQL中RR隔离级别转换成RC隔离级别案例

好了。一切正常了,这就是RR的特性,可重复读。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25dfc471f96e072bcff27fecd404a73a.html