MYSQL专题(九):undo log

undo log:回滚日志
  • 在执行事务的时候,必须引入另一种日志,用于回滚,undo log回滚日志
  • 这个回滚日志记录的东西很简单,你要是在缓存页里执行了一个insert语句,那么在undo log日志里,这个操作记录的回滚日志就必须是有一个主键和一个对应的delete操作,要能让你把这次insert操作给回退了;如果执行的是delete语句,那么回滚的话,就应该执行一个insert操作;如果是执行一个update语句,那么回滚的时候重新update成原来的值;select不改变值,所以不用记录
    在这里插入图片描述
INSERT语句的undo log回滚日志
  • INSERT语句的undo log的类型是TRX_UNDO_INSERT_REC,这个undo log里包含了以下一些东西
    • 这条日志的开始位置
    • 逐渐的各列长度和值:可能是联合主键,也可能是唯一主键;插入的数据的主键的每一列的长度和值;如果没有设置主键,mysql自己会给你弄一个row_id作为隐藏字段,作为主键
    • 表id:记录哪个表
    • undo log日志编号:每个undo log日志在每个事务里的undo log日志的编号都是从0开始的,然后依次递增
    • undo log日志类型:TRX_UNDO_INSERT_REC
    • 这条日志的结束位置
  • 在buffer pool的缓存页里插入了一条数据了,执行了insert语句,然后你写了一条上面的那种undo log,现在事务要回滚,你直接就把这条insert语句的undo log拿出来。然后再undo log里就知道在哪个表里插入的数据,主键是什么,直接定位到那个表和主键对应的缓存页,从里面删除掉之前insert语句插入进去的数据就可以了,这样就可以实现事务的回滚。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值