概述
在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。
undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。
可以简单的总结:
- undo log 记录着修改前的数据, 用于事务失败回滚。(具备事务的:原子性)
- redo log 记录着修改后的数据,可以用来恢复未写入日志,将已成功事务持久化数据库(持久性)。(崩溃恢复时,未commit的事务将被回滚 )
undo log的两个作用:
- 提供回滚
- 多版本控制(MVCC)。
回滚机制
多版本控制MVCC
参考:https://juejin.im/entry/5ba0a254e51d450e735e4a1f?spm=a2c4e.10696291.0.0.5c4f19a4MSUQpP
参考:https://blog.csdn.net/bohu83/article/details/81568341
参考:https://www.jianshu.com/p/d829df873332