InnoDB如何解决幻读

Innodb使用MVCC和next-key locks(行锁与间隙锁组合)解决幻读。MVCC(多版本并发控制)解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。

快照读(snapshot read):简单的select操作。

当前读(current read):适用于 insert,update,delete, select ... for update, select ... lock in share mode 语句,以及加锁了的 select 语句。

 

行锁:针对单个行记录加锁

间隙锁:(Gap Locking):可锁住索引之间的空隙。

Next-Key :帮我们锁住一个范围,同时锁住记录本身。

 

假设表里面id有3,4,5,事务A读取了id>3的数据之后,事务B无法插入id=6的数据,这是因为采用了 Next-Key 锁,4,5及后面的数字都会被锁定, 就无法插入符合这个范围的数据了. 然后事务A重新进行条件范围的查询,就不会出现幻读的情况。

 

参考:

https://zhuanlan.zhihu.com/p/147574923

https://www.cnblogs.com/AlmostWasteTime/p/11466520.html

https://www.cnblogs.com/wwcom123/p/10727194.html

你可能感兴趣的:(InnoDB如何解决幻读)