mysql为什么是部分解决幻读

先看一下事务并发中两个容易混淆的概念:
不可重复读 和 幻读

不可重复读:事务A重复读取同一条数据,在读取的同时事务B修改并提交了这个条数据,那么A再读取的时候就会发生不一致。

mysql中默认的隔离级别是可重复读
如何解决呢:
1:当前读:给改条数据加锁(悲观锁),即读取的时候就加锁,防止其他事务读取该数据().它能保证读取的都是最新数据
2:快照读:mvcc,多版本并发控制,详细的原理就不说了,它使得读写不冲突,由于读的都是事务的当前版本的数据,因此重复读也不会发现数据被修改

在mysql种这两种方式的体现就是加锁和不加锁
普通查询不加锁使用快照读
如果在事务中出了查询外还有其他增加修改操作那么久要手动加锁实现当前读

是否mvcc就解决了幻读呢?一定程度上可以这么说,因为它保证事务中多次读取不会产生新的记录。
但是我们如果在事务中进行了插入操作,是否就能保证这条记录在插入时不存在呢?这点是不能保证的,这也是快照读的弊端。因此如果我们要保证操作安全就要手动加锁,如
select name from student where id >= 0 for update…

或者使用串行化的隔离级别

这是我对mysql幻读的理解,如果理解存在问题欢迎指出。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值