mysql rr 更新失败_RR 级别下 update 操作的是快照读还是当前读?
我们知道在 RR 级别下,重复的 select 操作,读取的值都会是一致的。即便在两次 select 操作的中间,有一个事务 B 修改了值,但是在事务 A 中 select 读取的值还是一致的。
那么如果是 update 操作呢?之前在网上看到一篇博客说 RR 级别下,CAS 操作是没有意义的。因为 version 值在一个事务中都是一致不变的。于是我有了疑惑打算自己来验证一下。
验证想法
RR 级别下 update 操作的是快照读还是当前读?
准备数据
准备了以下简单的表数据结构。
sid
name
sex
version
1
zhangsan
0
0
2
lisi
1
0
验证思路
通过 version 值做 CAS 版本,修改 sex 值。
A 事务先执行,通过 sleep 5 秒延迟最后的 update 操作。
B 事务后执行,通过 sleep 1 秒使得它虽然事务 id 更大,但比 A 事务更早执行完成。
查看 A 事务通过 version 字段 CAS 操作能否修改成功 sex 值。
如果能修改成功即 update 语句 where 条件定位的是快照读,反之则定位的是当前读。
事务脚本
事务 A
事务 A 先执行,事务 id 小
begin;
SELECT version from student where sid = 1;
// 当前获取的version为0
SELECT SLEEP(5);
SELECT version from student where sid = 1;
// 此时获取的version依然为0
update student set sex = 1 , version = version +1 where sid = 1 and version = 0;
// 修改行数为0,修改操作失败,说明version已经不是0了,
commit;
事务 B
事务 B 后执行,事务 id 大
begin;
SELECT version from student where sid = 1;
// 当前获取的version为0
SELECT SLEEP(1);
SELECT version from student where sid = 1;
// 此时获取的version依然为0
update student set sex = 2 , version = version +1 where sid = 1 and version = 0;
// 修改成功,此时当前version为1
commit;
验证结果
事务 A 的 update 操作失败,说明 update 中的 where 条件定位的记录是当前读而非快照读。
mysql rr 更新失败_RR 级别下 update 操作的是快照读还是当前读?相关推荐
- Mysql可重复读隔离级别下如何解决幻读
Mysql可重复读隔离级别下如何解决幻读 一些概念 具体加锁说明 使用主键索引进行等值查询 使用主键索引进行范围查询 使用二级索引进行等值查询 使用二级索引进行范围查询 一些概念 幻读:在一次事务中, ...
- 计算机windows7更新失败,Win7电脑windows update更新失败如何解决?
长时间使用计算机后,始终需要更新一些补丁.但是,在用户发现修补程序已更新后,Windows更新失败.那么,当您遇到Windows 7系统更新失败时怎么解决呢?让我们教你如何解决它. 教程/方法 1.自 ...
- 配置失败还原请勿关闭计算机,win7系统遇到更新失败提示“配置windwos update 失败还原更改,请勿关闭计算机”的解决方法...
很多小伙伴都遇到过 具体方法如下: 第一种方法:进入安全模式,关闭update 1.重新启动电脑不断按f8,到了高级启动选项,选择[安全模式]进入: 2.进行安全模式后,指向计算机机,右键属性.在左下 ...
- mysql 页 存储,MySQL InnoDB Engine--数据页存储和UPDATE操作
叶子节点数据: ## 主键索引叶子节点数据 06 06 06 00 00 10 00 27 41 41 30 30 30 31 00 00 00 00 05 4F 38 00 00 00 91 04 ...
- rc mysql common_RR与RC隔离级别下MySQL不同的加锁解锁方式
作者 韩杰·沃趣科技MySQL数据库工程师 出品 沃趣科技 | RC与RR隔离级别下MySQL不同的加锁解锁方式 MySQL5.7.21 数据准备 root@localhost : pxs ...
- mysql中不同事务隔离级别下数据的显示效果--转载
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...
- git更新失败出现向下箭头
一般更新失败有可能有冲突的,如果是没用的可以先用replace with 下的index 恢复到最新版本,再pull下就没问题了 如果有需要提交的,先提交更改的,然后pull,再push to upS ...
- jsp mysql环境_MySQL在JSP环境下的操作应用
前提: 将mysql数据库的驱动放在工作目录的web-inf/lib目录下(这样才能在jsP中连结上) 用javaBean连接,将编译好得.class文件放在classes文件下,若文件包含packa ...
- mysql被更新失败_更新mysql出错:出错原因 You are using safe update mode
更新mysql出错:出错原因 You are using safe update mode 追逐太阳-追求梦想 2017-12-04 20:59:24 2968 收藏 分类专栏: mysql 版权 出 ...
最新文章
- Matlab 图像的邻域和块操作
- 方便的图片修改Sql代码
- Linux登录界面消失解决办法
- 一文说通异步 LINQ
- JAVA反射机制初步理解
- [linux 日常]修改ls目录的颜色
- GDAL虚拟文件简介
- Canonical 创始人:考虑让 Ubuntu 支持鹦鹉桌面
- [ACM训练] 算法初级 之 搜索算法 之 广度优先算法BFS (POJ 3278+1426+3126+3087+3414)
- FX3U解密软件已开发成功,完美读出程序、参数、软元件区数据
- java excel 打勾_在excel中如何打钩
- 基于大数据平台分析前程无忧大数据招聘信息实现数据可视化
- python爬取皮肤_如何用Python爬取LOL官网全英雄皮肤
- 全球及中国3D打印人体器官行业发展态势及前景策略分析报告2022-2028年
- Xftp的下载和安装(超详细)
- CLEval: Character-Level Evaluation for Text Detection and Recognition Task 论文阅读
- Atitit 二维码和条码的历史发展 1.发展历程 编辑提及二维码的诞生,我们还得倒回至上个世纪 60 年代之后的日本,虽然 1945 年的第二次世界大战之中日本沦为战败国,可是在经济方面日本却进入
- 陕西省职业计算机考试试题,2010陕西省计算机等级考试试题 二级C试题最新考试试题库...
- sklearn.ensemble模型融合
- tensorflow 自定义向量外积
热门文章
- 手把手教你理解卷积神经网络
- 如果还不懂如何使用 Consumer 接口,就来看这篇!
- 华为云专属月·行业深耕专项行动正式开启
- 数据之光 · 安全未来 | 第四届中国数据安全治理高峰论坛圆满召开!
- Cloud一分钟 | 谷歌投资的AR云平台开发商Blue Vision Labs,将由美版滴滴Lyft收购
- python编写加密程序_用Python实现一个简单的加密程序
- app inventor离线版_百度要哭了!今日头条出了搜索引擎了,还做了APP
- ***error*** (zip#Browse) unzip not available on your system
- 数据装载 计算执行脚本总耗时_shell源码_01
- 企业实战02:Oracle数据库的安装和卸载