同学好,课程里面讲得比较清楚,通常我们理解的RR级别是避免不了幻读的,但是MYSQL在RR级别下却避免了幻读,就是在RR隔离级别下具备让我们看不到phantom行的能力,但是这并不意味着快照读是避免幻读现象发生的根本,只是你如果先于要提交数据变更的事务打开read view时,不论别的事务的变更是否已提交,在当前事务内再次调用快照读即MVCC的时候还是读的是可见性版本内的数据,有一种掩耳盗铃的意味在里面。其实,在RR、Serializable级别下真正防止幻读发生的是因为事务对数据加了next-key锁。同学可以仔细学习一下next-key锁这一章