Mysql 中的 RR 事务隔离级别,在特定的情况下会出现幻读的问题。所谓的幻读,表示在同一个事务中的两次相同条件的查询得到的数据条数不一样。那在 RR 级别下,具体什么情况下会出现幻读呢?
来看这样一种情况{如图},在事务 1 里面通过 update 语句触发当前读的情况下,就会导致在该事务中的前后两次查询的数据行数不一致,从而出现幻读的现象。
导致幻读的根本原因是,update 触发的当前读操作,绕过了快照读,从而导致 MVCC 机制在当前场景下失效。最终读取到了事务 2 中已经提交的数据。为了避免出现这类的情况,我们可以通过 for update 语句加锁。