以下针对InnoDB 存储引擎
几个重要组件和属性
行隐藏列
DB_TRX_ID:mysql会为每个事务分配一个事务id,该字段记录最后一次插入或更新该行的事务 id。
DB_ROLL_PTR:回滚指针,指向该行的 undo log。
DB_ROW_ID:当表没有主键且没有唯一非空索引时生成的隐藏主键。
Read View读视图
三个主要属性为
1.m_up_limit_id 最小活跃事务id
2.m_low_limit_id 当前出现过的最大的事务 id+1
3.m_ids 活跃事务id列表
undo log
undo log是链表结构,头部记录最新值,每次修改都会把当前行记录作为最新值插入链表
可见性算法
1,如果数据行的事务id小于Read View最小事务id,则该行数据对当前事务可见。
2,如果数据行的事务id>=Read View中记录的当前出现的最大事务id+1,则跳转步骤5执行。
3,事务id列表为空,则该行数据可见。
4,如果数据行的事务id大于等于Read View最小事务id,并且
小于Read View中记录的当前出现的最大事务id+1。
判断若存在于活跃事务id列表,则不可见。
判断若不存在于活跃事务id列表,则可见。
5,根据回滚指针在undo log中取出一条记录,从1步骤重复判断,直到找到满足条件的记录,否则返回空。