我们知道在 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 操作的是快照读还是当前读?相关推荐

  1. Mysql可重复读隔离级别下如何解决幻读

    Mysql可重复读隔离级别下如何解决幻读 一些概念 具体加锁说明 使用主键索引进行等值查询 使用主键索引进行范围查询 使用二级索引进行等值查询 使用二级索引进行范围查询 一些概念 幻读:在一次事务中, ...

  2. 计算机windows7更新失败,Win7电脑windows update更新失败如何解决?

    长时间使用计算机后,始终需要更新一些补丁.但是,在用户发现修补程序已更新后,Windows更新失败.那么,当您遇到Windows 7系统更新失败时怎么解决呢?让我们教你如何解决它. 教程/方法 1.自 ...

  3. 配置失败还原请勿关闭计算机,win7系统遇到更新失败提示“配置windwos update 失败还原更改,请勿关闭计算机”的解决方法...

    很多小伙伴都遇到过 具体方法如下: 第一种方法:进入安全模式,关闭update 1.重新启动电脑不断按f8,到了高级启动选项,选择[安全模式]进入: 2.进行安全模式后,指向计算机机,右键属性.在左下 ...

  4. 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 ...

  5. rc mysql common_RR与RC隔离级别下MySQL不同的加锁解锁方式

    作者   韩杰·沃趣科技MySQL数据库工程师 出品   沃趣科技 |  RC与RR隔离级别下MySQL不同的加锁解锁方式 MySQL5.7.21 数据准备 root@localhost : pxs ...

  6. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  7. git更新失败出现向下箭头

    一般更新失败有可能有冲突的,如果是没用的可以先用replace with 下的index 恢复到最新版本,再pull下就没问题了 如果有需要提交的,先提交更改的,然后pull,再push to upS ...

  8. jsp mysql环境_MySQL在JSP环境下的操作应用

    前提: 将mysql数据库的驱动放在工作目录的web-inf/lib目录下(这样才能在jsP中连结上) 用javaBean连接,将编译好得.class文件放在classes文件下,若文件包含packa ...

  9. mysql被更新失败_更新mysql出错:出错原因 You are using safe update mode

    更新mysql出错:出错原因 You are using safe update mode 追逐太阳-追求梦想 2017-12-04 20:59:24 2968 收藏 分类专栏: mysql 版权 出 ...

最新文章

  1. Matlab 图像的邻域和块操作
  2. 方便的图片修改Sql代码
  3. Linux登录界面消失解决办法
  4. 一文说通异步 LINQ
  5. JAVA反射机制初步理解
  6. [linux 日常]修改ls目录的颜色
  7. GDAL虚拟文件简介
  8. Canonical 创始人:考虑让 Ubuntu 支持鹦鹉桌面
  9. [ACM训练] 算法初级 之 搜索算法 之 广度优先算法BFS (POJ 3278+1426+3126+3087+3414)
  10. FX3U解密软件已开发成功,完美读出程序、参数、软元件区数据
  11. java excel 打勾_在excel中如何打钩
  12. 基于大数据平台分析前程无忧大数据招聘信息实现数据可视化
  13. python爬取皮肤_如何用Python爬取LOL官网全英雄皮肤
  14. 全球及中国3D打印人体器官行业发展态势及前景策略分析报告2022-2028年
  15. Xftp的下载和安装(超详细)
  16. CLEval: Character-Level Evaluation for Text Detection and Recognition Task 论文阅读
  17. Atitit 二维码和条码的历史发展 1.发展历程 编辑提及二维码的诞生,我们还得倒回至上个世纪 60 年代之后的日本,虽然 1945 年的第二次世界大战之中日本沦为战败国,可是在经济方面日本却进入
  18. 陕西省职业计算机考试试题,2010陕西省计算机等级考试试题 二级C试题最新考试试题库...
  19. sklearn.ensemble模型融合
  20. tensorflow 自定义向量外积

热门文章

  1. 手把手教你理解卷积神经网络
  2. 如果还不懂如何使用 Consumer 接口,就来看这篇!
  3. 华为云专属月·行业深耕专项行动正式开启
  4. 数据之光 · 安全未来 | 第四届中国数据安全治理高峰论坛圆满召开!
  5. Cloud一分钟 | 谷歌投资的AR云平台开发商Blue Vision Labs,将由美版滴滴Lyft收购
  6. python编写加密程序_用Python实现一个简单的加密程序
  7. app inventor离线版_百度要哭了!今日头条出了搜索引擎了,还做了APP
  8. ***error*** (zip#Browse) unzip not available on your system
  9. 数据装载 计算执行脚本总耗时_shell源码_01
  10. 企业实战02:Oracle数据库的安装和卸载