• 前言

    一、案例1

    二、产生幻读的原因

    1.数据的版本

    总结


  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

MVCC多版本并发控制,在重复读的隔离级别下,用事务id为数据记录行标识了其版本,事务只能看到已经提交的、先于或者等于自己版本号的数据。

但是仅仅依靠MVCC仍然无法完全避免幻读的情况发送。


提示:以下是本篇文章正文内容,下面案例可供参考

一、案例1

1、开始表中有两条记录,先开启事务A,执行下面两行SQL

start transaction with consistent snapshot;select k from t where id BETWEEN 1 and 3;

2、看到查询结果,接着开启事务B,执行下面的SQL,可以看到插入成功了

begin;insert into t value(2,2);commit;

3、接着让事务A执行这两条SQL,会发现多了一条数据,产生了幻读

update t set k=k+1 where id=2;
select k from t where id BETWEEN 1 and 3;

二、产生幻读的原因

1.数据的版本号

MVCC是依靠版本号来决定数据的可见性的,当然一个事务无法拒绝对自己的版本(自己的事务id)的可见性,当执行了update操作后,id=2的数据的版本中就有了它自己的版本,也就可见了。

总结

使用MVCC+间隙锁,可以解决幻读的问题。

所以MVCC虽然是无锁的,却不能完全解决幻读,还是需要锁的参与。

MVCC能保证不产生幻读吗相关推荐

  1. Mysql学习(六)-- innodb如何避免幻读及MVCC和间隙锁详解

    1. 问题:间隙锁导致死锁 最近由于想让代码快一点把一段代码逻辑从:查询->存在即删除->插入:改成了:根据条件删除->插入. 后来查看数据发现很多数据都不见了,不知道出现了什么bu ...

  2. 数据库隔离级别解决脏读、不可重复读、幻读

    一.脏读.不可重复读.幻读 脏读 读取了未提交的事务. 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 解决:如果一个事务在读的时候,禁止读取未提交的事务. 不可重复读 ...

  3. mysql 幻读理解_Mysql 幻读 的一些个人理解

    背景 由于最近在准备换工作,所以开始补充一些基础知识,以前准备的时候总是去硬背一些知识点,这次花了不少时间去问了问为什么,年前对于幻读的内容有了点心得,为了不遗忘,也是为了只有能讲出来才算是真的理解了 ...

  4. 事务和事务的隔离级别及脏读、幻读

    1.为什么需要事务 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要不全部成功,要不全部不成 ...

  5. MysqlMVCC原理和幻读解决

    1.  MVCC全称(Multi-Version Concurrency Control), 即多版本并发控制,主要是为了提⾼数据库的并发性能,解决幻读问题. 2.  快照读.当前读 快照读:顾名思义 ...

  6. 面试官:你说熟悉MySQL,那来谈谈InnoDB怎么解决幻读的?

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

  7. MySQL面试三连杀:如何实现可重复读、又为什么会出现幻读、是否解决了幻读问题?...

    作者 | sanyuesan0000 来源 | https://blog.csdn.net/sanyuesan0000 事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读 ...

  8. MySQL中的InnoDB是怎么解决幻读的?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Aaron_涛 来源 | blog.csdn. ...

  9. 面试 | 你说你熟悉MySql,那你就来谈谈InnoDB如何解决幻读的?

    这是小小本周的第一篇. 今天干了啥 今天可是周日,一个休息日,对于休息日来说,小小本身也是比较忙碌的,忙碌的小小,耗费的很多的时间,终于倒腾完成了GitChat,一篇GitChat 将会于近日出炉.完 ...

最新文章

  1. Python符号计算库sympy使用笔记
  2. DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?
  3. android studio 使用CMAKE
  4. 科学家发现鱼会数学,5以内的加减法难不倒它,网友:要多吃鱼了
  5. 1.2.4 在Python中使用向量化的技巧和注意事项
  6. C语言拾零(to be continued)
  7. Java Machine Learning Tools Libraries--转载
  8. matlab同时给多个变量赋值(deal)
  9. jQuery实现星星评分功能
  10. python图标的演变_Python3 生成icon图标
  11. 计算机二级考试开考多久能出来,【计算机二级】明天就要开考了,你们准备好了吗?...
  12. 梯度下降算法动图_Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习...
  13. 你会用 JSON.stringify()? JSON.stringify一些坑
  14. 线性同余法产生均匀随机数C语言,利用线性同余法产生随机数进行同步计算
  15. linux中wps默认安装目录,在Linux系统中安装使用WPS的方法
  16. 高薪背后的“难言之隐”,热门职业最为真实的健康观察报告
  17. 手机系统更新(提示已是最新版本),怎么升级更新
  18. 动态刷新listview中的数据
  19. nginx【nginx跨域、nginx开启gizp压缩、nginx服务器部署项目】
  20. 用JAVA算养鸡大户王大喜_养鸡大户王大喜,用百钱买百鸡,公鸡每只5元整,3元一只是母鸡,小小鸡崽价钱低,1元正好买三只,公鸡母鸡和小鸡,请你算算各...

热门文章

  1. 二叉树的讲解《二》(二叉树实现堆)
  2. Oracle 恢复删除数据
  3. 2-10、秋招年6月晋升期——《硬件架构的艺术-数字电路的设计方法与技术》
  4. 小白如何启动Vue项目?
  5. 千里走单骑:02-北京到上海骑记--Day1.首日征程
  6. sql语句批量导入数据库数据
  7. Spotfire 数据分析学习之一
  8. 现代社会科学的优选法:谈取向运作法
  9. 计算机创新杯说课大赛课件,信息化教学设计方案创新杯说课大赛国赛说课课件.doc...
  10. 操作系统:文件的物理结构(文件分配方式)