美文网首页
不可重复读/幻读

不可重复读/幻读

作者: 就叫basi | 来源:发表于2019-12-17 15:29 被阅读0次

    不可重复读:在同一个事务内,两个相同的查询返回了不同的结果不一致了

    主要针对数据的update和delete,使用REPEATABLE_READ可重复读解决该问题,repeatable_read通过mvcc实现,读取的是本事务第一次查询时的快照,也叫快照读,保证了读一致性

    幻读:事务二的数据操作仅仅是插入,事务一中两个查询返回了不同的结果,第二次查询可能返回了之前结果不存在的行

    使用临键锁(Next-key Locking = record locks + grp locks)解决该问题,在Next-key Locking算法下,不仅锁住扫描到的索引,还锁住了这些索引覆盖的范围

    mysql的rr级别已经保证了读一致性,为什么还会产生幻读?

    是因为快照读和当前读读取的是不同时间节点的数据。当前读是读取最新版本数据,是加了锁的。insert ,update 和delete都会默认执行当前读,并且加锁,select需要手动加锁(for update|lock in share mode),这两种读不是一个东西。读方式有两种,执行select的时候是快照读,其余是当前读,所以,mvvc不能根本上解决幻读的情况,只能解决所有事务都是读操作的(不加锁)。

    vans.png

    相关文章

      网友评论

          本文标题:不可重复读/幻读

          本文链接:https://www.haomeiwen.com/subject/ergsnctx.html