[MySQL]事务原理之redo log,undo log
Redo log 和 Undo log 是 MySQL 数据库用于确保事务日志的持久性和原子性的两种日志机制。
Redo log(重做日志): 用于确保事务的持久性。在事务提交后,MySQL 会将事务所修改的所有数据页写入到重做日志文件中,然后再写入磁盘。在数据库崩溃恢复时,可以通过重做日志恢复未写入磁盘的已提交事务数据。
Undo log(撤销日志): 用于保证事务的原子性以及实现多版本并发控制。当事务对数据进行修改时,会先将修改前的数据写入到 Undo log 中,然后才会对数据进行修改。如果事务执行失败或者需要回滚,可以通过 Undo log 中的数据来回滚到事务开始之前的状态。
以下是创建存储引擎为 InnoDB 表,并插入数据的简单示例:
-- 创建一个测试表
CREATE TABLE test_table (
id INT PRIMARY KEY,
value VARCHAR(255)
);
-- 开始一个事务
START TRANSACTION;
-- 插入数据
INSERT INTO test_table (id, value) VALUES (1, 'A');
-- 提交事务
COMMIT;
在这个过程中,MySQL 会使用 Redo log 和 Undo log 来确保数据的持久性和可恢复性。如果系统崩溃,MySQL 可以通过这些日志来恢复未提交的事务或已提交但未写入磁盘的事务数据。
评论已关闭