前情提要

为了在事务提交前,随时能够回滚缓存页中已经修改的数据,就需要用undolog来记录之前的改动情况。新增操作就对应着一个删除操作来回滚,删除操作也有对应的一个新增操作。更新操作也有对应的更新操作。

回滚类型

undolog根据操作类型分为3种类型。

新增

类型:TRX_UNDO_INSERT_REC
内容:

  • 日志开始位置
  • 主键的各列长度和值(可能是联合主键)
  • 表id
  • undolog日志编号
  • undolog日志类型
  • 日志结束位置
    操作:
    在回滚时,通过获取主键的值以及表id可以直接定位到对应的缓存页,从里面删除之前插入的数据

删除

更新

如果更新的条件是主键列,则删除行然后添加一条记录。
如果更新的条件不是主键列,则进行反向更新。

undolog版本链

03.数据在磁盘上的存储中,说到了数据在磁盘上的存储格式,其中就包含了隐藏字段:DB_TRX_ID和DB_ROLL_PTR。

  • DB_TRX_ID:最近一次更新这条数据事务的ID
  • DB_ROLL_PTR:更新这个事务之前生成的undolog
    通过这2个隐藏字段,就可以在多事务并发访问下,保证数据的串行修改。

示例

最后修改:2022 年 06 月 23 日
如果觉得我的文章对你有用,请点个赞吧~