在InnoDB中,会在每行数据后添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。 在实际操作中,存储的并不是时间,而是事务的版本号,每开启一个新事务,事务的版本号就会递增。 在可重读Repeatable reads事务隔离级别下:

  • SELECT时,读取创建版本号<=当前事务版本号,删除版本号为空或>当前事务版本号。
  • INSERT时,保存当前事务版本号为行的创建版本号
  • DELETE时,保存当前事务版本号为行的删除版本号
  • UPDATE时,插入一条新纪录,保存当前事务版本号为行创建版本号,同时保存当前事务版本号到原来删除的行


通过MVCC,虽然每行记录都需要额外的存储空间,更多的行检查工作以及一些额外的维护工作,但可以减少锁的使用,大多数读操作都不用加锁,读数据操作很简单,性能很好,并且也能保证只会读取到符合标准的行,也只锁住必要行。在MySQL的RR级别中,是解决了幻读的读问题的。
在RR级别中,通过MVCC机制,虽然让数据变得可重复读,但我们读到的数据可能是历史数据,是不及时的数据,不是数据库当前的数据。对于这种读取历史数据的方式,我们叫它快照读 (snapshot read),而读取数据库当前版本数据的方式,叫当前读 (current read)

转载于:https://www.cnblogs.com/reaperhero/articles/10624612.html

MVCC在MySQL的InnoDB中的实现相关推荐

  1. MySQL笔记-InnoDB中Record Lock与Gap Lock

    锁:用于在多个事务访问同一个对象时根据这些操作访问同一对象的先后次序给事务排序. 不同数据库的锁实现: InnoDB:行级锁: Oracle:行级锁: MyISAM:表级锁: Microsoft SQ ...

  2. mysql基础-InnoDB 中的索引

    1. InnoDB 中的索引 InnoDB 中的索引自然也是按照 B+树来组织的,前面我们说过 B+树的叶子节 点用来放数据的,但是放什么数据呢?索引自然是要放的,因为 B+树的作用本 来就是就是为了 ...

  3. 【MySQL】InnoDB中的行级锁

    行锁,也称为记录锁,顾名思义就是在记录上加的锁.但是要注意,这个记录指的是通过给索引上的索引项加锁.InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,In ...

  4. 【Mysql】InnoDB 中 B+ 树索引的注意事项

    一.根页面万年不动 在之前的文章里,为了方便理解,都是先画存储用户记录的叶子节点,然后再画出存储目录项记录的内节点. 但实际上 B+ 树的行成过程是这样的: 每当为某个表创建一个 B+ 树索引,都会为 ...

  5. 【Mysql】InnoDB 中的 B+ 树索引

    接上一篇内容,InnoDB 的作者想到一种更灵活的方式来管理所有目录项,是什么? 一.目录项记录页 其实这些用户目录项与用户记录很像,只是目录项中的两个列记录的是主键和页号而已,那么就可以复用之前存储 ...

  6. ib_logfile和mysql_bin_mysql的innodb中事务日志ib_logfile

    mysql的innodb中事务日志ib_logfile 事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节 开启几组日志来服务 ...

  7. mysql mvcc undo_Mysql Innodb中undo-log和MVCC多版本一致性读 的实现

    http://blog.sina.com.cn/s/blog_4673e603010111ty.html 本文主要介绍mysql中innodb引擎undo-log和事务中MVCC多版本一致性读的实现. ...

  8. MySQL数据库InnoDB存储引擎中的锁机制--转载

    原文地址:http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化 ...

  9. Mysql 存储引擎中InnoDB与Myisam的主要区别

    一直以为我spring事物没有配置好,结果发现是mysql的表本身设置成了Myisam 引擎.改成innodb就支持事物了. 1, 事务处理 innodb 支持事务功能,myisam 不支持. Myi ...

最新文章

  1. Java Lambda表达式入门
  2. hive 的udf 函数使用
  3. MIT、CMU 美国计算机专业最牛20名学校大点评
  4. 知乎:GAN 的发展对于研究通用人工智能有什么意义?
  5. android截图canvas为空,html2canvas截图空白问题的解决
  6. [原]关于在 iOS 中支持 DLNA
  7. .rpt文件内容读取java_Java快速入门(26) 文件和IO操作
  8. linux 不显示路径原因,linux 下shell 显示-bash-4.1不显示路径解决办法
  9. python传文件_Python实现Windows和Linux之间互相传输文件(文件夹)的方法
  10. Aop 是面向切面编程,
  11. 线性时间选择算法-《数据结构》(结合例题讲解)
  12. 新版微信语音转发方法 萌妹子变声器手机版 微信语音怎么转发给别人
  13. JAVA实现从服务器下载文件,将下载文件转成文件流响应给前端
  14. 关于掉落的详细分析。
  15. 内存小的浏览器有哪些,好不好用?分享一些使用感受
  16. 【unity】维护一个changelog
  17. Element UI table 修改定位
  18. 单声道数据转双声道_单声道转双声道方法
  19. R语言笔记⑧——数据挖掘算法
  20. 2008年10大知名杀毒软件排行榜

热门文章

  1. oracle创建表时创建序列号,oracle表中怎么建序列
  2. 皁新哪学计算机好,北京科技大学计算机基础模拟AB .doc
  3. oracle生成42位,Oracle HowTo:如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
  4. 成田机场坐access到品川_@马大哈们:北京有三座机场了,以后订票别选错哦!大兴机场今试飞...
  5. 麻瓜编程python爬虫微专业_麻瓜编程 - 主页
  6. c语言程序设计运用,清华大学出版社-图书详情-《C语言程序设计及应用教程》...
  7. open dwg file_体育直播间 | 时隔六年,又一次中韩对决!S10全球总决赛SN对战DWG!...
  8. mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...
  9. 二叉树常用方法(一)
  10. vue的route懒加载