InnoDB怎么解决幻读的?

1. 结论

首先说结论,在RR的隔离级别下,Innodb使用MVCC和next-key locks解决幻读,MVCC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。

 

2. 幻读是什么

事务A,先执行:

update table set name=“hh” where id>3;

结果为:

OK row xx 表名成功影响多少行数据

 

事务B,后执行,并且提交:

insert into table values(11, uu);

commit;

 

事务A,然后再select一下:

select * from table where id>3

结果集为:

11,uu

事务A懵了,我特么不是id>3全部更新了吗

这次是已提交事务B对事务A产生的影响,这个影响叫做“幻读”。

幻读和不可重复读的区别是,前者是一个范围,后者是本身

3. 怎么解决的?

3.1. 当前读

所谓当前读,指的是加锁的select(S或者X), update, delete等语句。在RR的事务隔离级别下,数据库会使用next-k

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值