Mysql MVCC多版本解析
1.首先各行数据,都有一个trx_id(事务ID)和回滚指针,形成一个链表数据结构的数据。其实这便是undo.log(回滚日志)
2.当select查询数据的时候,还会生成视图数据。
其中包含未提交的最小事务、未提交事务ID数组、应该分配下一个的事务ID、创建视图的事务ID
首先会生成read view,将未提交的事务记录下来,并生成当前read view事务ID、未提交事务最小的ID。
3.此时就可以通过这个read view和undo.log进行比较。
首先会比较行数据trx_id与未提交的事务最小事务ID,如果trx_id<未提交的事务最小事务ID,说明事务是在已提交后创建的,所以可见。
trx_id>=分配下一个事务ID,则说明当前视图是所有未提交的事务创建之后才提交的.
如出现未提交的事务最小事务ID<trx_id<分配给下一个事务ID
这里还会出现一个判断如果trx_id在未提交数组里面,是可见的。否则不可见。
每天坚持,终会抵达!