MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。
隐式字段(隐藏列)
DB_TRX_ID:6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID
DB_ROLL_PTR:7byte,回滚指针,指向这条记录的上一个版本(存储于rollback segment里)用于操作回滚
DB_ROW_ID:6byte,隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引
实际还有一个删除flag隐藏字段, 既记录被更新或删除并不代表真的删除,而是删除flag变了
readview
存储 当前事务id 未提交事务ids 未开始事务ids
undolog
存储 原有字段 DB_TRX_ID DB_ROLL_PTR
某个事物读取数据的时候 去找到DB_TRX_ID为自己要找的那串数据(该字段id小于此时并发的最小id 也就是已经保存的数据)
否则就根据DB_ROLL_PTR继续往前找
读已提交
每次查询都创建readview
可重复度
只创建第一次readview 之后重复读取直接拿第一次读到的数据