Undo Log日志文件的内容结构

文章详细阐述了UndoLog在MySQL事务中的作用,它记录了相反的操作SQL,如delete对应insert,用于事务回滚。当事务中有部分操作未执行时,通过执行UndoLog中的语句可实现数据的回滚。UndoLog日志包含日志开始和结束地址、主键信息、表id、日志类型等关键信息。
摘要由CSDN通过智能技术生成

一、Undo Log的作用

之前讲过回滚日志-undo log,现在我们对undo log回滚原理再进行深入了解。如果一个事务里有4个增删改操作,结果已经执行了2个增删改并且buffer pool里的数据已经被修改了,但是剩下的俩个增删改还没有执行,此时事务回滚了怎么办?但是如何回滚呢?所以在执行事务的时候,需要用到undo log回滚日志

undo log日志里面主要记载了与你操作相反的sql,例如:执行的是delete语句,那么就要把删除的那条数据记录下来,如果要回归,就应该执行一条insert语句,把数据插回去。如果是select语句就不会进入undo log中,只有insert、update、delete语句才会写入undo log日志中。

二、Undo Log日志文件内容

上一节将了redo log日志文件的内容,这里自然少不了undo log日志文件内容的简介。我们就以insert语句为例。insert语句的undo log的类型是:TRX_UNDO_INSERT_REC。这个undo log日志文件中包含了以下一些东西:

  • 这条日志开始位置:日志开始的地址

  • 主键的各列长度和值:你操作这条数据的主键的每个列,他的长度是多少,具体的值是多少,即使你没有设置主键,mysql自己也会给你弄一个row_id作为隐藏字段,作为你的主键。

  • 表id:每个表属于自己的id,记录下来是在哪个表里插入数据

  • undo log日志编号:每个undo log都有自己的编号

  • undo log 日志类型:TRX_UNDO_INSERT_REC,insert语句的undo log日志类型。

  • 这条日志的结束位置:日志结束的地址

所以,之前俩个语句已经执行,但是要回滚还有俩个语句没有执行怎么办?现在只需要执行一下undo log日志里面的语句,就可以将数据进行回滚了。

借道友法力一用:

========================== stay hungry stay foolish =============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值