以下讲解都是在InnoDB的基础上的。
MVCC的意思是multi-version concurrency control,多版本并发控制。官方只是说的多版本multi-version,多版本并不只是为了并发控制,还为了回滚等事务特点。
事务的特点有并发和回滚等。
InnoDB是一个支持多版本的存储引擎。他维护着修改过的行的历史版本信息用以实现事务特性。
InnoDB会在每行数据上添加3个字段:
一个6字节的 DB_TRX_ID 字段,用来标识插入或修改行的上个事务。删除也被当做修改对待,通过一个特殊的位来标记是否删除。
一个7字节的 DB_ROLL_PTR 字段,成为回滚指针,回滚指针指向撤销日志记录,撤销日志用于重建行为被修改前的状态。
一个6字节的 DB_ROW_ID 字段,一个在新增行时单调递增的ID。只有在InnoDB自动生成聚簇索引时,索引才会有row ID,否则DB_ROW_ID不会出现在任何索引中。