undo log与redo log:事务日志详解
MySQL的三种日志 日志类型 作用 实现层 记录内容 刷盘时机 undo log 保证原子性(回滚) InnoDB 修改前的旧值 事务执行时 redo log 保证持久性(崩溃恢复) InnoDB 修改后的新值 事务提交时 binlog 主从复制、数据恢复 Server层 逻辑SQL或行变更 事务提交时 1. undo log(回滚日志) 作用 事务回滚:保证原子性(ROLLBACK时恢复数据) MVCC实现:提供历史版本数据(快照读) 记录内容 记录数据修改前的旧值,用于回滚。 -- 执行UPDATE前,记录旧值到undo log UPDATE account SET balance = 900 WHERE id = 1; -- undo log记录: INSERT INTO undo_log VALUES ( trx_id = 101, table_id = account, row_id = 1, old_balance = 1000 -- 修改前的旧值 ); undo log类型 类型 操作类型 回滚方式 INSERT undo INSERT 删除插入的行 UPDATE undo UPDATE/DELETE 恢复修改前的值 -- INSERT undo log INSERT INTO account VALUES (2, 'B', 500); -- undo log:DELETE FROM account WHERE id = 2; -- UPDATE undo log UPDATE account SET balance = 900 WHERE id = 1; -- undo log:UPDATE account SET balance = 1000 WHERE id = 1; -- DELETE undo log DELETE FROM account WHERE id = 1; -- undo log:INSERT INTO account VALUES (1, 'A', 1000); 版本链 undo log通过DB_ROLL_PTR形成版本链,用于MVCC。 ...