mysql隔离级别对应的解决问题

什么是幻读?
幻读,在一个事务里面的两次相同过滤条件的读取,读取的数据数条数不一致。(注意和不可重复读的区别)

MySQL的默认隔离级别是RR,但是却没有幻读的问题,那他是怎么解决的呢?答案就是Gap锁。

隔离级别脏读不可重复读幻读
Read Uncommitted可能可能可能
Read Committed不可能可能可能
Repeat Read不可能不可能可能(MySQLInnoDB不可能)
串行化不可能不可能不可能

MySQL的Gap锁
MySQL的共享锁(读锁)和排它锁(写锁)大家应该都比较熟悉了,那gap锁是什么东西呢?

select *from user where age>0 and age<10 for update;
或者
select *from user where age>0 and age<10;
或者
select *from user where age>0 and age<10 in share mode;

举个栗子,我们在一个事务中执行上述的SQL语句,数据库中只有age=1,age=4,age=7,age=8 这三条满足条件的记录,那么gap锁会加到age=2,3,5,6,9上面,如果另外一个事务里面想insert age=2,3,5,6,9 是会被阻塞的,因为第一个事务拿到了gap锁。

MySql中如果是快照读,那么是通过MVCC(多版本控制)来避免幻读.

如果是当前读,那么是通过gap锁来避免幻读
转载自 https://blog.csdn.net/weixin_34378045/article/details/92427934

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值