首先要介绍几个概念:

1.    MVCC(Multi-Version Concurren):多版本并发控制,是MySQL的事务型存储引擎如InnoDB。

2.    trx_id与roll_pointer:MySQL会给每个表加2个字段,trx_id是事务字段id,roll_pointer为回滚字段。

3.    事务会有一个ID,只有更新(删除和插入是特性的更新)会生成事务ID。

4.    在事务中进行更新,会把原记录放到undo回滚日志里面,然后再插入一条新记录,这个新记录的roll_pointer指向刚刚放到undo回滚日志里面的那个记录。

5.    在事务中使用select不会生成事务ID。

6.    但执行查询sql会生成一致性视图read-view,它由查询的那一刻所有未提交事务ID数组和已经创建的最大事务ID组成。查询的数据结构需要和read-view做对比从而得到数据。

7.    删除操作是特殊的update,在版本链最新的地方复制一份,然后将删除的事务id放到trx_id中,同时在该几年的头信息(record header)里的(deleted flag)标记为true,表名记录已经被删除,不返回数据。

8.    MVCC快照机制不同的session,查询同一条sql语句,如果存在不一样的结果集,并不是在不同的session复制一份。

9.    MySQL中快照也叫版本链,也叫记录版本链,也叫undo回滚日志。 只有1个。

10.  read-view指的是未提交事物数组到最大的事物ID,可重复读会沿用前面的read-view。

11.   事务又分为重复读和提交后读,重复读在东一个会话下查值是一样的。

12.   重复读如果第一次读到100,不管中间其他会话怎么操作,不管有没有提交,在这个会话下都只会读到100.除非undo数据被清了。

了解上面的各个概念,其实就差不多了。

下面来搞个时序图分析下:

再来一个分析图:

MySQL高级理论-MVCC提交查询相关(版本链)相关推荐

  1. Mysql事务隔离MVCC机制

    MVCC是Mysql保证可重复读和读已提交两个级别的隔离性用到的一套机制,串行化执行是通过加锁来实现的,而MVCC机制下在对同一行数据进行读和写时,不会直接加锁互斥. MVCC主要由undo日志版本链 ...

  2. mysql查询01课程比02课程_小菜菜mysql练习解读分析2——查询存在 01 课程但可能不存在 02 课程的情况(不存在时显示为 null )...

    "查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )" --翻译为:课程表里面,存在01的信息,未必满 ...

  3. MySQL高级 —— 查询性能优化

    引言 承接<MySQL高级 -- 高性能索引>,本篇博客将围绕<高性能MySQL(第三版)>第六章内容进行总结和概括. 与索引的部分一样,SQL优化也是广大程序员深入MySQL ...

  4. Mysql高级-应用优化,查询缓存优化,锁

    文章目录 1. 应用优化 1.1 使用连接池 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL复制分流查询 ...

  5. Mysql的MVCC知多少(隐藏字段,undolog版本链和ReadView)

    文章目录 前言 一.什么是MVCC 二.快照读与当前读 三.4种隔离级别与MVCC 四.MVCC实现 4.1 隐藏字段和undolog版本链 4.2 ReadView 五.说明 前言 其实自己之前对M ...

  6. mysql实现可重复读(解决幻读)的原理(MVCC机制的版本链和读视图)

    ​​​​​​​ 版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列): ...

  7. MySQL高级查询语句——超详细,一篇就够了

    MySQL高级查询语句 一.MySQL进阶查询 1.1.按关键字排序--order by 1.2.对结果进行分组--group by 1.2.1.单个分组 1.2.2.分组结合order by使用 1 ...

  8. 高级查询(二)+php中文网,MySQL高级查询方法之记录查询

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 此文章主要向大家描述的是MySQL高级查询方法之记录查询的实际操作步骤,以及对其实际操作过程中要用到的代码的详细描述,以下 ...

  9. MySQL高级查询习题

    MySQL高级查询习题 提示: emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno所属部门编号) dept ...

最新文章

  1. python从控制台读取数据
  2. 磁盘管理命令:du df
  3. python三引号注释_python3学习笔记(三):注释和字符串
  4. 降低网站跳出率的技巧分享!
  5. JAVA项目中出现部分中文乱码问题
  6. 网站维护:利用iptables和ipset屏蔽恶意IP的访问
  7. oracle数据库12下载地址,Oracle 数据库和补丁下载地址 12.1.0.2 11.2.0.4 11.2.0.1
  8. pca各个向量之间的相关度_详细推导PCA算法
  9. 【关系抽取】从头来看关系抽取-远程监督来袭
  10. 2020年中国地质灾害和地震发生数量、受灾人数和经济损失现状,防护和治理至关重要「图」
  11. node+redis+阿里云短信验证码,注册手机验证码完整功能代码
  12. Unity - Timeline 之 Deleting tracks(删除轨道)
  13. Axure如何建立共享项目 如何编辑共享项目 如何获取共享项目
  14. 终于在linux上用wine装上qq了
  15. 阿里云宽带是怎么按流量进行计费的?
  16. pytorch1.10新功能inference_mode
  17. websphereJDBC提供驱动程序配置问题,导致报错:Illegal attempt to enlist multiple 1PC XAResources
  18. PDF编辑方法,怎么删除PDF中的一页
  19. Houdini学习 —— 使用VOP进行陨石坑效果制作
  20. 【量化交易】永久投资组合,海龟交易法则阅读,回测与讨论

热门文章

  1. android调用.Net WebService传递byte[]
  2. delphi开发日志——注入“思想”,让程序操纵数据
  3. 15 道超经典大厂 Java 面试题!重中之重
  4. 腾讯:中小企业数字化转型路径报告|附PDF下载
  5. 脱离业务的技术架构,都只是一团废纸,教你从0-1建设业务架构
  6. 飞鸽传书联系企业内部管理机制
  7. 历史重现,德国海关突袭IFA大展
  8. 关羽在韩国有块私家地?
  9. 15个优雅的Python编程技巧,掌握后瞬间玩转Python
  10. 2020年学习编程最好的10个网站,绝对不可错过!!