mysql的可重复读隔离级别解决了不可重复读和大部分幻读
RR级别下能解决以下问题:
1.mvcc解决了两次快照读的不可重复读和幻读,也就是说中间其他事务进行插入和删除都不会阻塞并返回正确结果
2.next-key间隙锁➕记录锁是解决了两次当前读的不可重复读和幻读,在当前读期间,其他的事务会被阻塞
3.但是先快照读,然后其他事务更新数据,最后进行当前读这种情况会出现不可重复读和幻读
RC级别下并不能解决不可重复读和幻读,原因是:
1.在同一事务中,前后两次快照读都是读的都是不同的快照,因为它是RC(即读已提交),也就是说在两次快照读中间,另一个事务修改了数据并提交,那么它第二次读的时候也会读取这个改动。所以两次快照读出的数据是不一样的,所以就会出现不可重复读
2.在同一事务中,前后两次快照读都是读的都是不同的快照,因为它是RC(即读已提交),也就是说在两次快照读中间,另一个事务插入了数据并提交,那么它第二次读的时候也会读取这个改动。所以两次快照读出的数据是不一样的,所以就会出现幻读
3.如果是两次当前读,RC级别下,它只有行锁,没有间隙锁,但是可以防止其他事务对数据进行修改,所以不会出现不可重复读
4.如果是两次当前读,RC级别下,它只有行锁,没有间隙锁,所以并不能防止中间其他事务对数据的插入,所以也会出现幻读的问题