​ MVCC(Multi-Version Concurrent Control),即多版本并发控制,通过保存数据在某个时间点的快照来实现,因此每个读操作都会看到一个一致性的视图,并且可以实现非阻塞的读。MVCC允许数据具有多个版本,这个版本可以是时间戳或者是全局递增的事务ID,在同一个时间点,不同的事务看到的数据是不同的。

InnoDB实现MVCC原理:

InnoDB会为每一行数据添加两个隐藏字段,分别表示该行创建的版本号和删除的版本号,这两个版本号填入的是系统版本号,随着事务的创建不断递增。(事务开始时刻的系统版本号就是事务的版本号)。通过每行数据的(创建版本号/删除版本号)与新事务的当前版本号比较来实现数据版本控制。

  • select:满足以下两个条件innodb会返回该行数据:

    • 该行的创建版本号小于等于当前版本号,保证改行在当前版本之前已经被插入
    • 该行的删除版本号大于当前版本或者为空。删除版本号大于当前版本意味着当前版本并未执行该行的删除操作
  • insert:将新插入的行的创建版本号设置为当前系统的版本号,说明该行在当前版本被插入
  • delete:将要删除的行的删除版本号设置为当前系统的版本号,说明该行在当前版本被删除
  • update:不执行原地update,而是转换成insert + delete。将旧行的删除版本号设置为当前版本号,并将新行insert同时设置创建版本号为当前版本号

执行insert、delete和update都要将系统版本号递增。

参考:https://www.cnblogs.com/aspirant/p/6920987.html

InnoDB实现MVCC原理的更多相关文章

  1. Innodb 实现高并发、redo/undo MVCC原理

    一.并发控制   因为并发情况下有可能出现不同线程对同一资源进行变动,所以必须要对并发进行控制以保证数据的同一与安全.   可以参考CPython解释器中的GIL全局解释器锁,所以说python中没有 ...

  2. InnoDB的MVCC实现原理

    InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的. 这两个列,一个保存了行的创建时间,一个保存了行的过期时间(删除时间).当然存储的并不是实际时间,而是系统版本号(sytem ve ...

  3. MVCC原理 4步 什么是MVCC、事务ACID、事物隔离级别、Innodb存储引擎是如何实现MVCC的

    MVCC是来处理并发的问题,提高并发的访问效率,读不阻塞写.事物A 原子性C 一致性I 隔离性D 持久性高并发的场景下的问题脏读不可重复读幻读事物隔离级别RU读未提交 脏读/不可重复读/幻读 .不适用 ...

  4. Mysql 中的MVCC原理,undo日志的依赖

    一. MVCC 原理了解   原文点击:MVCC原理浅析 读锁: 也叫共享锁.S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...

  5. InnoDB高并发原理

    一.并发控制 为啥要进行并发控制? 并发的任务对同一个临界资源进行操作,如果不采取措施,可能导致不一致,故必须进行并发控制(Concurrency Control). 技术上,通常如何进行并发控制? ...

  6. 看一遍就懂:MVCC原理详解

    MVCC实现原理也是一道非常高频的面试题,自己在整理这篇文章的时候,感觉到网上的资料在讲这块知识点上写的五花八门,好像大家的理解并没有一致. 这里将自己所理解的做一个总结,个人会觉得这是一篇含金量挺高 ...

  7. MySQL MVCC原理

    1 MVCC基本原理 MVCC:多版本并发控制(MVCC,Multiversion Currency Control).一般情况下,事务性储存引擎不是只使用表锁,行加锁的处理数据,而是结合了MVCC机 ...

  8. 对Innodb中MVCC的理解

    一.什么是MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(如MySql)引擎实现中常用的处理读写冲突的手段,目的在于提 ...

  9. 【mysql】关于innodb中MVCC的一些理解

    一.MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代 ...

随机推荐

  1. ORB-SLAM(八)ORBmatcher 特征匹配

    该类负责特征点与特征点之间,地图点与特征点之间通过投影关系.词袋模型或者Sim3位姿匹配.用来辅助完成单目初始化,三角化恢复新的地图点,tracking,relocalization以及loop cl ...

  2. SpringBoot学习:整合shiro(rememberMe记住我功能)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 首先在shiro配置类中注入rememberMe管理器 /** * cookie对象; ...

  3. 转 Cobar使用文档(可用作MySQL大型集群解决方案)

    转自:http://blog.csdn.net/shagoo/article/details/8191346 最近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了 ...

  4. iOS 测试工具reveal可视化调试工具的使用

    简单翻译一下reveal可视化图形工具插入项目的官方文档(官方英文版file:///Applications/Reveal.app/Contents/SharedSupport/Documentati ...

  5. hdu1422重温世界杯(动态规划,最长子序列)

    重温世界杯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. hdu1517A Multiplication Game(巴什博弈变形)

    A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  7. Java学习 · 初识 异常机制

    异常机制 1.   程序中的异常 a)     b)    面对异常如何解决 i.           由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii.           ...

  8. Spark- 根据IP获取城市(java)

    开源 IP 地址定位库 ip2region 1.4 ip2region 是准确率 99.9% 的 IP 地址定位库,0.0x毫秒级查询,数据库文件大小只有 2.7M,提供了 Java.PHP.C.Py ...

  9. 【MySQL解惑笔记】Centos7下卸载彻底MySQL数据库

    彻底卸载Yum安装的MySQL数据库 在我第二章MySQL数据库基于Centos7.3-部署过程中,因为以前安装过其它的版本所以没有卸载干净影响后期安装 一.卸载Centos7自带的Maridb数据库 ...

  10. DeepLearning - Forard & Backward Propogation

    In the previous post I go through basic 1-layer Neural Network with sigmoid activation function, inc ...