简单谈谈mysql中的日志 undo log
undo log 又名撤销日志,其主要作用可以用作事务的回滚,和对mvcc的支持。
在事务回滚中使用undo log
当执行修改的时候,innodb会记录修改前的数据,备份到undo log 中,不同的语句有不同的记录方式
- insert操作,会记录插入记录的主键id。
- delete操作,会记录删除记录的所有内容。
- update操作,会记录修改列的旧值。
当事务发生回滚的时候,innodb会使用该信息进行回滚。
在mvcc中如何使用undo log
在undo log中,有个隐藏列roll_pointer,指向的是上一个对该记录进行操作的undo log 记录id。
同时,在undo log 中还记录了操作的事务id。
通过roll_pointer,可以生成一个undo log 操作的版本链。
因此,事务可以通过该版本链和 read view 读试图规则,找到对事务可见的undo log记录,并且恢复出当时的数据。
mvcc过程可见:简单说说mysql的mvcc-CSDN博客