1、可重复读

可重复读(REPEATABLE READ)是MySQL的默认隔离级别,具体是指在同一事务中多次读取的数据是一致的。

2、如何实现

MySQL是使用多版本并发控制(MVCC,Mutil-Version Concurrency Control)实现的。

在InnoDB中,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的删除时间。存储的时间值实际是系统版本号(system version number)。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。在可重复读隔离级别下,MVCC的具体操作如下:

SELECT:

  • a. 只查询版本早于当前事务版本的数据行。
  • b. 行的删除版本要么 未定义,要么大于当前事务的版本号。这可以确保事务读取到的行,在事务开始之前未被删除。

INSERT:

​ InnoDB为新插入的每一行保存当前系统版本号作为行版本号。

DELETE:

​ InnoDB为删除的每一行保存当前系统版本号作为行删除标识。

UPDATE:

​ InnoDB为插入一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。

MYSQL 如何实现重复读相关推荐

  1. MySQL使用可重复读作为默认隔离级别的原因

    参考:http://www.cnblogs.com/vinchen/archive/2012/11/19/2777919.html 一般的DBMS系统,默认都会使用读提交(Read-Comitted, ...

  2. mysql解决不可重复读_mysql怎么解决不可重复读

    mysql解决不可重复读的方法:采用了mvcc多版本并发控制,mvcc是利用在每条数据后面加了隐藏的两列,即创建版本号和删除版本号,每个事务在开始的时候都会有一个递增的版本号. [相关学习推荐:mys ...

  3. mysql防止不可重复读_mysql怎么解决不可重复读

    mysql解决不可重复读的方法:采用了mvcc多版本并发控制,mvcc是利用在每条数据后面加了隐藏的两列,即创建版本号和删除版本号,每个事务在开始的时候都会有一个递增的版本号. [相关学习推荐: my ...

  4. Mysql在可重复读事务隔离级别下怎么解决幻读的

    目录 前言 并发事务产生的问题 更新丢失 回滚丢失 覆盖丢失 脏读 不可重复读 幻读 快照读和当前读 幻读验证 快照读如何避免幻读 当前读如何避免幻读 可重复读隔离级别发生幻读情况 小结 前言 Mys ...

  5. 【MySQL】可重复读模式下 unique key失效案例

    一 [背景]    今天上午文能提笔安天下,武能上马定乾坤的登博给团队出了一道题目,谁先复现问题,奖励星巴克一杯.激起了一群忙碌的屌丝DBA的极大热情.问题是这样滴,如下图 登博提示了几个细节:   ...

  6. mysql幻读和不可重复读的区别_面试官:MySQL的可重复读级别能解决幻读吗

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...

  7. 不可重复读和幻读的区别_面试官:MySQL的可重复读级别能解决幻读吗

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...

  8. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  9. mysql串行化防幻读原理_透彻解读mysql的可重复读、幻读及实现原理

    目录 一.事务的隔离级别 二.mysql怎么实现的可重复读 举例说明MVCC的实现 MVCC逻辑流程-插入 MVCC逻辑流程-删除 MVCC逻辑流程-修改 MVCC逻辑流程-查询 三.幻读 快照读和当 ...

最新文章

  1. las数据转pcd并显示
  2. linux将bridge当做hub来用
  3. 红黑树中nil结点_什么是红黑树?程序员面试必问!
  4. linux绑定team网卡,linux 实现双网卡绑定单个IP——team篇
  5. Java进阶 | Proxy动态代理机制详解
  6. java 107问_JAVA面试题26-107(答案)
  7. 帆软finereport决策系统自定义登录界面
  8. Pytorch Dataset、Dataloader的简单理解与使用
  9. 为什么你学了 N 遍 Spring Boot,至今还是学生项目?你的问题在这里 | 原力计划...
  10. 微信公众平台模拟登录 php,微信公众平台模拟登陆问题
  11. 基于FPGA的正弦信号发生器设计
  12. 老瞎眼 pk 小鲜肉-线段树+区间离线
  13. JavaScript实现的转盘抽奖html页面前端源码
  14. 损益科目不进行结转导致的对账问题
  15. 基于 Kubernetes 部署 Zookeeper,太有意思了!
  16. SNMP4J(通过java实现SNMP协议)
  17. matlab中等高图_高图– jQuery的更深入实践
  18. 关于Android动画的一点愚见
  19. 给出一个123 456的矩阵,输出转置矩阵
  20. MATLAB产生随机阶跃信号

热门文章

  1. MOV AX,DATA MOV DS,AX
  2. 50天50个页面-DAY1-Expanding Card
  3. java libusb_Windows下的Java访问USB设备解决之道(翻译Java libusb / libusb-win32 wrapper)收...
  4. js-PhotoSwipe相册功能
  5. latex 跳转标签_在 LaTeX 中使用交叉引用
  6. html 自动排序表格,表格排序.html
  7. [JMeter]java.net.URISyntaxException: Malformed escape pair at index 83
  8. 使用python编写多普勒频移函数,绘制多普勒频移随速度变化的曲线,给出代码并举例,代码以markdown格式给出...
  9. npm报错:npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
  10. 窗口最小化后不出现在任务栏上