MVCC能保证不产生幻读吗
前言
一、案例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能保证不产生幻读吗相关推荐
- Mysql学习(六)-- innodb如何避免幻读及MVCC和间隙锁详解
1. 问题:间隙锁导致死锁 最近由于想让代码快一点把一段代码逻辑从:查询->存在即删除->插入:改成了:根据条件删除->插入. 后来查看数据发现很多数据都不见了,不知道出现了什么bu ...
- 数据库隔离级别解决脏读、不可重复读、幻读
一.脏读.不可重复读.幻读 脏读 读取了未提交的事务. 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 解决:如果一个事务在读的时候,禁止读取未提交的事务. 不可重复读 ...
- mysql 幻读理解_Mysql 幻读 的一些个人理解
背景 由于最近在准备换工作,所以开始补充一些基础知识,以前准备的时候总是去硬背一些知识点,这次花了不少时间去问了问为什么,年前对于幻读的内容有了点心得,为了不遗忘,也是为了只有能讲出来才算是真的理解了 ...
- 事务和事务的隔离级别及脏读、幻读
1.为什么需要事务 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要不全部成功,要不全部不成 ...
- MysqlMVCC原理和幻读解决
1. MVCC全称(Multi-Version Concurrency Control), 即多版本并发控制,主要是为了提⾼数据库的并发性能,解决幻读问题. 2. 快照读.当前读 快照读:顾名思义 ...
- 面试官:你说熟悉MySQL,那来谈谈InnoDB怎么解决幻读的?
1. 结论 首先说结论,在RR的隔离级别下,Innodb使用MVCC和next-key locks解决幻读,MVCC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻 ...
- MySQL面试三连杀:如何实现可重复读、又为什么会出现幻读、是否解决了幻读问题?...
作者 | sanyuesan0000 来源 | https://blog.csdn.net/sanyuesan0000 事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读 ...
- MySQL中的InnoDB是怎么解决幻读的?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Aaron_涛 来源 | blog.csdn. ...
- 面试 | 你说你熟悉MySql,那你就来谈谈InnoDB如何解决幻读的?
这是小小本周的第一篇. 今天干了啥 今天可是周日,一个休息日,对于休息日来说,小小本身也是比较忙碌的,忙碌的小小,耗费的很多的时间,终于倒腾完成了GitChat,一篇GitChat 将会于近日出炉.完 ...
最新文章
- Python符号计算库sympy使用笔记
- DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?
- android studio 使用CMAKE
- 科学家发现鱼会数学,5以内的加减法难不倒它,网友:要多吃鱼了
- 1.2.4 在Python中使用向量化的技巧和注意事项
- C语言拾零(to be continued)
- Java Machine Learning Tools Libraries--转载
- matlab同时给多个变量赋值(deal)
- jQuery实现星星评分功能
- python图标的演变_Python3 生成icon图标
- 计算机二级考试开考多久能出来,【计算机二级】明天就要开考了,你们准备好了吗?...
- 梯度下降算法动图_Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习...
- 你会用 JSON.stringify()? JSON.stringify一些坑
- 线性同余法产生均匀随机数C语言,利用线性同余法产生随机数进行同步计算
- linux中wps默认安装目录,在Linux系统中安装使用WPS的方法
- 高薪背后的“难言之隐”,热门职业最为真实的健康观察报告
- 手机系统更新(提示已是最新版本),怎么升级更新
- 动态刷新listview中的数据
- nginx【nginx跨域、nginx开启gizp压缩、nginx服务器部署项目】
- 用JAVA算养鸡大户王大喜_养鸡大户王大喜,用百钱买百鸡,公鸡每只5元整,3元一只是母鸡,小小鸡崽价钱低,1元正好买三只,公鸡母鸡和小鸡,请你算算各...