undo log日志长什么样

      对于一个事务,如果有2条个增删改操作,如果目前已经执行了1个操作,修改了一些数据,还有1条逻辑没有执行,此时事务要回滚怎么办?Mysql中有一个回滚日志 undo log日志。

      如果你在执行了一个insert语句,那么此时在Undo log日志中,对这个操作记录的回滚日志就必须有一个主键和一个对应的delete操作。

      那么比如说你要执行的是delete操作,那么起码你要把你删除的那条数据数据记录下来,如果要回滚,就应该执行一个insert操作把那条数据插入回去。

      如果你要是执行的是update语句,那么起码你要把你更新之前的那个值记录下来,回滚的时候重新update一下,把你之前更新前的旧值给他更新回去。

那么insert语句的undo log日志到底长什么样子呢?

insert语句的undo log的类型是TRX_UNDO_INSERT_REC,这个undo log里面包含了以下一些东西:

  • 这条日志的开始位置
  • 主键的各列长度和值
  • 表id
  • undo log日志编号,每个事务里的undo log日志的编号都是从0开始的,然后一次递增
  • undo log日志类型
    在这里插入图片描述
    有了这些数据undo log里就知道在哪个表里插入的数据,主键是什么,直接定位到那个表和主键对应的数据页,从里面删除之前insert语句插入进去的数据,这样就实现了事务回滚效果!

猜你喜欢

转载自blog.csdn.net/filling_l/article/details/112854276