MVCC是否解决了幻读问题

在Mysql读写并发时可能造成:

1.事务隔离性问题

2.脏读、幻读、不可重复读

写写并发可能存在数据更新的丢失问题

读读并发不会产生问题

MVCC是一种数据库事务并发控制技术,在Mysql中可以使用InnoDB存储引擎实现

通过数据库中的隐式字段undo日志和 readview来实现的

1.开启MVCC,首先需要将Mysql的隔离级别设置为至少可重复读

2.在设置隔离级别之后需要在创建表的时候使用 InnoDB存储引擎,并且启用事务支持

3.向表中插入两条数据

 4.可以通过一下命令来开启一个新的事务

begin; 或者 start transaction;

5.查询表中数据,在可重复读的隔离级别下,普通查询生成了一个readview

6.在另一个终端开启另一个事务 

begin;

7.对css表进行增加数据

 此时如果第二事务不进行提交,那么第一事务会查询不到id=3的记录,此时没有产生幻读,也不能修改id=3的记录

如果修改会报:错误1205(HY000):超过锁定等待超时;尝试重新启动事务

 将第二事务提交:commit;

8.在第一事务中查询 此时没有产生幻读

但是在第一事务中修改 此时产生了幻读,因为这条记录是最新的记录所以产生了幻读

 这是因为在执行update时将新记录里面的隐藏列trx_id变成了第一事务的事务编号

所以第一事务再次查询时就能查到最新的id=3的记录,这时就产生了幻读(两次查询结果不一致)

在mysql可重复读的隔离级别下并没有彻底解决幻读只是在很大程度上解决了幻读的发生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值