mvcc (多版本并发控制),开启多个事务,并基于快照读Read View实现;

Read View几个属性
    trx_ids: 当前系统活跃事务版本号集合;
    low_limit_id: 创建当前read view 时, 系统最大事务版本号+1;
    up_limit_id: 创建当前read view 时,  活跃事务最小版本号;
    creator_trx_id: 创建当前read view的事务版本号;

read_view  可见性规则:
 1.数据事务ID小于read view中的最小活跃事务ID,即trx_id<up_limit_id,

说明数据是在当前事务生成read view之前就已经存在了,则显示
   
 2.数据事务ID大于或等于read view 中的当前系统的最大事务ID,即trx_id>low_limit_id,

说明该数据是在当前read view 创建之后才产生的,则不显示
 
 3.trx_id = creator_trx_id,是本事务产生的数据,则显示
 4.被访问版本的trx_id,在readview的min_trx_id和max_trx_id之间,则需要判断trx_id值是否在m_ids列表中
    如果在:说明创建readview时,该版本的事务还未提交,通过回滚指针查找历史版本并返回;
    如果不在:说明创建readview时,该版本的事务已经提交,所以直接返回该版本的数据

结合具体列子,
准备一张表,字段为id,age,当我们插入一条数据的时候,mysql会增加几个隐藏字段,不会展示给我们用户,其中一个字段为事务id,即trx_id
准备三个事务,分别更新数据,trx_id是隐藏的,这里列出来方便说明

id age  trx_id point
事务1 1 1 1 指针
事务2 1 2 2 指针
事务3 1 3 3 指针

注:这个不是表数据,事务提交或者回滚后,只有一条

首先,开启事务1,插入一条数据id=1,age=1 这时隐藏列trx_id的值假如为1,以后的事务在此基础上依次增长,提交事务,这时数据库里就有一条数据了。

情景1
      开启事务2,执行查询操作,
      那么trx_id=2,mysql会记录开启是这个事务时的事务数据,包括目前存活的事务id列表trx_ids,值为2
      最大事务id ,活跃的最大事务id+1,low_limit_id 为3;
      最小事务id,up_limit_id 为2;
      自己的事务版本,creator_trx_id为2

开启事务2执行查询全表的操作,表中生成id为1的数据的事务id为1,即trx_id 1<2,显示id=1的这条数据;

情景2
   开启事务2,事务执行查询之前,开启了事务3,并更新为id=1,age=3,提交完成,此时事务2查询,id=1的这条数据的trx_id为3,即trx_id 3>=3,不会显示age=3的这条数据,通过回滚直接读取历史版本,显示age为1的数据

情景3
   开启事务2,事务3,事务3执行更新,未提交,
   事务2执行查询操作,活动的事务trx_ids列表为(2,3),low_limit_id为4,up_limit_id为2
   age为3的记录的trx_id处于 2 <= 3 <4,3在 trx_ids中,不显示这个版本的数据;

情景4
   开启事务2,事务3,事务3执行更新并提交,
   事务2执行查询操作,活动的事务trx_ids列表为(2),low_limit_id为4,up_limit_id为2
   age为3的记录的trx_id处于 2 <= 3 <4,3不在 trx_ids中,显示这个版本的数据;

通俗理解 mysql 的mvcc机制相关推荐

  1. 轻松理解MySQL的MVCC机制

    PS:本文需要一点MySQL原理的前置知识 MVCC   MVCC(Multi Version Concurrency Control),也叫多版本并发控制,顾名思义,就是通过记录的多个版本来实现数据 ...

  2. 什么是MVCC,一文搞懂MySQL的MVCC机制

    MVCC是什么 MVCC,即Multi-Version Concurrency Control (多版本并发控制).它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中 ...

  3. 面试必备,MySQL InnoDB MVCC机制

    MySQL InnoDB MVCC机制吐血总结 谈到MySQL事务,必然离不开InnoDB和MVCC机制,同时,MVCC也是数据库面试中的杀手问题,写这篇总结的目的,就是为了让自己加深映像,这样面试就 ...

  4. 【MySQL笔记】正确的理解MySQL的MVCC及实现原理

    MVCC多版本并发控制 如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL 的测试环境是 5.7 前提概要 什么是 MVCC 什么是当前读和快照读 ...

  5. MySQL的MVCC机制是什么?

    MySQL的MVCC机制是什么? MySQL的MVCC机制 Multiversion concurrency control 多版本并发控制并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本 ...

  6. MySQL的MVCC机制看完这篇你还不懂,算我输

    前言 MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧,虽然在平时MySQL使用过程中基本上用不到,但是面试中出场率十分高,而且作为架构师的你也是需要知道它的工作机制.那么你对MVCC机制了解多 ...

  7. MySQL InnoDB MVCC机制吐血总结

    原文:https://www.jianshu.com/p/d67f0329d3bf 谈到MySQL事务,必然离不开InnoDB和MVCC机制,同时,MVCC也是数据库面试中的杀手问题,写这篇总结的目的 ...

  8. oracle的mvcc解析,PostgreSQL原理:Oracle 和 MySQL 中MVCC机制详解

    MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制.在介绍MVCC之前我们先来简单了解下事务的隔离级别: read uncommitted:脏 ...

  9. Mysql的MVCC机制

    MVCC--多版本并发控制机制(Multi-Version Concurrency Control) Mysql的MVCC指多版本并发控制,Myql在读已提交和可重复读隔离级别下都实现了MVCC机制. ...

最新文章

  1. mysql象限和投影_Camera类之orthographic-摄像机投影模式(第100篇随笔)
  2. Java实现简单的队和栈
  3. 记录之pytorch中文文档
  4. apk之间数据共享的方式
  5. (多源转化成单源dijsktra)一个人的旅行
  6. lua——赢三张牌型处理相关算法(中)——牌型判定
  7. python2和3通用的头文件写法 不确定是否叫头文件 这种说法 大概就是这个意思
  8. Atitit 知识管理 知识体系专业分类介绍
  9. excel多个窗口独立显示_办公软件操作技巧060:如何快速切换excel工作簿
  10. 联发科6758_OPPO新机使用联发科天玑720处理器,整体性能到底怎么样?
  11. web服务之LAMPLNMP架构
  12. LocalDate的用法与String互转
  13. http://nian.so/#网站的拓展工具编写
  14. 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
  15. 松下电视机竟暗藏魂斗罗游戏(哈哈哈)
  16. 服装搭配软件测试自学,五大穿搭App评测推荐,轻松解决你的日常穿搭烦恼!
  17. HBase:Hive与HBase的整合
  18. linux下登录ftp
  19. 有铅焊锡丝与无铅焊锡丝的性能差异大解析
  20. galgame 游戏动画汉化(动画外挂字幕)和字幕合成方法

热门文章

  1. Android字体大小怎么自适应不同分辨率?
  2. 评测三款最流行的azw3阅读器(ios手机适用)
  3. iOS 中如何添加应用自己的字体,使用萍方体
  4. ZYH‘s 冬季片单
  5. js逆向之携程酒店房价抓取
  6. 如何计算两个日期之间相隔的天数?calendar的用法
  7. 2022年中国互联网招聘行业发展现状及行业优化策略分析[图]
  8. 计算机二级office考试试题分布,计算机二级MS-OFFICE考试ECEL题型汇总附答案.pdf
  9. 阶梯电价计算:电价分三个档次,一档:0~110(含110)度电,每度电0.5元;二挡:110~210(含210)度电,超出110部分每度电0.55元;三挡:超过210度电,超出210部分每度电0.70
  10. 阶梯电价问题解决方法