a
多版本并发控制原理分析 之 隐式字段
(1) DB_TRX_ID
a. 占用6byte
b. 记录了创建这条记录时, 最近一次创建或修改该记录的事务id
(2) DB_ROLL_PTR
a. 占用7byte, 回滚指针
b. 指向这条记录的上一个版本(存储于rollback segment回滚段里)
(3) DB_ROW_ID
a. 6byte, 隐含的自增ID(隐藏主键)
b. 如果数据表没有主键, Innodb会自动以DB_ROW_ID产生一个聚簇索引.
(4) 创建版本号
记录了创建事务时的版本号
(5) 删除版本号
记录了删除事务时的版本号
隐式字段填充过程:
(1) 初始化数据:
DB_TRX_ID : NULL, DB_ROLL_PTR : NULL, DB_ROW_ID : 1
此时没有事务, 所以前两个为null, row_id会自增填充.
属于历史记录, 存储在undo log里
(2) 事务1 (假如修改了某字段值):
DB_TRX_ID : 1, DB_ROLL_PTR : 指针, DB_ROW_ID : 1
开启了事务, 所以回滚指针指向了上一个版本的记录.
(3) 事务2:
第二个事务, DB_TRX_ID会变为最近一次的事务id, 即从1变为2. 指针指向了事务1的版本.
mysql hide field
隐式字段