> 文章列表 > 后悔了怎么办 - undo日志

后悔了怎么办 - undo日志

后悔了怎么办 - undo日志

一、undo日志

概念: 把回滚时所需的东西都给记下来

二、事务id

  1. 给事务分配id的时机
    (1)对于只读事务来说只有在它第一次对某个用户创建的临时表执行增、删、改操作时才会为这个事务分配一
    个 事务id
    ,否则的话是不分配 事务id 的。
    (2)对于读写事务来说,只有在它第一次对某个表(包括用户创建的临时表)执行增、删、改操作时才会为这个
    事务分配一个 事务id
    ,否则的话也是不分配 事务id 的。
  2. 事务id是怎么生成的
    步骤有三:
    (1)服务器会在内存中维护一个全局变量,每当需要为某个事务分配一个 事务id 时,就会把该变量的值当作 事
    务id 分配给该事务,并且把该变量自增1。
    (2)每当这个变量的值为 256 的倍数时,就会将该变量的值刷新到系统表空间的页号为 5 的页面中一个称之为
    Max Trx ID 的属性处,这个属性占用 8 个字节的存储空间。
    (3)当系统下一次重新启动时,会将上边提到的 Max Trx ID 属性加载到内存中,将该值加上256之后赋值给我们
    前边提到的全局变量(因为在上次关机时该全局变量的值可能大于 Max Trx ID 属性值)。
    这样就可以保证整个系统中分配的 事务id 值是一个递增的数字。先被分配 id 的事务得到的是较小的 事务id ,
    后被分配 id 的事务得到的是较大的 事务id 。
  3. trx_id隐藏列
    概念是某个对这个聚簇索引记录做改动的语句所在的事务对应的 事务id
  4. undo日志的格式
    (1)INSERT操作对应的undo日志
    (2)DELETE操作对应的undo日志
    (3)UPDATE操作对应的undo日志
    INSERT操作对应的undo日志如下:
    roll_pointer隐藏列roll_pointer 本质就是一个指针,指向记录对应的undo日志,如图:后悔了怎么办 - undo日志