源码固然重要,但是每个问题背后都有一个基本的逻辑思路
undo log即回滚日志,update操作时undo log记录了某行记录变更之前的样子,行记录通过回滚指针(DATA_ROLL_ID)关联到undo log变更前的记录,这条记录依然可以DATA_ROLL_ID找到之前的还原点(undo log中的记录)。insert和delete记录了反向的delete和insert操作。从我的描述来看undo log记录的是逻辑上如何还原。
这次一次Mysql事务只要记录下undo log,这样在我们应用程序中调用connection.rollBack()时就会按undo log中逻辑进行回滚,这样就保证了一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行成功。那你们会疑问如果这时Mysql那台服务器突然断电,会不会再重启时出现异常,不会,因为undo log也通过redo log来保证持久性。