Mysql的UndoLog分析

290 阅读1分钟

在redolog分析中我们讲了事务提交后会写入redo日志到磁盘,这样就算mysql宕机或服务器断电也可以根据redolog加载出来,在buffer-pool的缓存页进行数据重做最终将修改后的数据刷到数据页上。今天我们要分析的是undolog,它的作用就算用来进行事务回滚的。假如你新增了一条数据

insert into Users('name','age','job') values('张三''22','cxy')

那需要回滚的时候在undolog中记录的是对应的delete 语句。undolog只对新、删、改进行日志记录因为查询无所谓的因为不影响buffer-pool里的缓存页的数据。

UndoLog日志

一条insert语句在undolog中类型为TRX_UNDO_INSERT_REC 并包含如下几个部分

  1. 日志的开始文章
  2. 主键各个列长度及值
  3. 表Id
  4. undo log日志编号
  5. undo log日志类型
  6. 这条日志结束位置

其中主键各个列的长度及值是说你插入一条数据必然有主键如id,如果多个列就是联合主键这里保存的就是主键及其值。 现在有了这个回滚日志如果想要回滚数据是不是就方便了,知道了表知道了主键及值是不是可以轻松的回滚数据。