InnoDB 是一个多版本存储引擎。它保留已更改行的旧版本的信息,以支持事务性功能,如并发和回滚。此信息存储在名为回滚段(rollback segment)的数据结构中。InnoDB 使用回滚段中的信息执行事务回滚所需的撤销操作。它还使用这些信息构建行的早期版本,以实现一致性读取。
InnoDB 在内部向数据库中存储的每一行添加 3 个字段:
-
6 字节 DB_TRX_ID 字段:表示插入或更新行的最后一个事务的事务标识符。此外,删除操作在内部被视为更新,行中的特殊位被设置为将其标记为已删除。
-
7 字节 DB_ROLL_PTR 字段:称为滚动指针。滚动指针指向写入回滚段的撤销日志记录。如果行已更新,则撤销日志记录包含更新前恢复行内容所需的信息。
-
6 字节 DB_ROW_ID 字段:包含一个随着插入新行而单调增加的行 ID。如果 InnoDB 自动生成聚集索引,则该索引包含行 ID。否则,DB_ROW_ID 列不会出现在任何索引中。