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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值