mysql学习-6.innodb下的mvcc版本控制

1.undo log版本链

每一行数据都有两个隐藏字段 一个是trx_id(事务ID),一个是roll_pointer(指向执行事务之前的undo log中的旧值),那么在undo log中会形成一个版本链


2.readview机制

m_ids--记录生成readview的时候此刻还未提交的trx_id(事务ID)

min_trx_id--m_ids中的最小值

max_trx_id--是mysql下一个要生成的事务ID,最大事务ID.就是m_ids中最大的下一个

creator_trx_id--自己的事务ID


3.基于readview实现RC

每次读的时候都会创建readview,所以第二次读的时候如果B事务提交了那么就不会在m_ids中出现,自然而然就会可见了

4.基于readview实现RR以及解决幻读

事务A开始知道事务最终提交之间中的每一次查询都只会生成一个readview

所以只会读到少于min_trx_id的值和自己修改的值,所以既可以重复读又可以解决幻读

幻读的概念:在查询中由于中间被别的事务插入了数据,导致第一次和第二次查到的数据条数不一致

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本...
    AnyL8023阅读 503评论 0 0
  • MVCC 笔记 MVCC为了解决什么问题? 多版本并发控制,针对在并发访问数据库时对于数据版本的控制以及隔离性问题...
    刘凝云阅读 579评论 0 0
  • 事务定义及四大特性事务是什么?就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部...
    叶叶阿姨阅读 216评论 0 0
  • 夜莺2517阅读 127,760评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,605评论 28 53