mysql的RR下当前读和快照读不一致的情况;记录锁和间隙锁;幻读解释

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的RR下当前读和快照读不一致的情况;记录锁和间隙锁;幻读解释相关的知识,希望对你有一定的参考价值。

先上幻读的解释

幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。

当前读和快照读不一致的情况

RR级别下,通过MVCC保证同一事务内两次快照读不出现幻读,通过间隙锁保证同一事务内两次当前读不出现幻读。但是如果是你先快照度一次,再当前读一次,如果两次读期间别的事务插入了数据并提交了的话,两次读的结果就可能不一致出现幻读。

记录锁和间隙锁

记录锁是加在索引上的锁,间隙锁是加在索引之间的。

间隙锁:将当前数据行与上一条数据和下一条数据之间的间隙锁定,保证此范围内读取的数据是一致的。

以上是关于mysql的RR下当前读和快照读不一致的情况;记录锁和间隙锁;幻读解释的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-InnoDB-MVCC多版本并发控制

MySQL-InnoDB-MVCC多版本并发控制

MySQL 事务管理

MySQL 事务管理

MySQL 事务管理

MySQL事务并发问题和MVCC机制