MySQL如何确保ACID特性(原子性、一致性、隔离性、持久性)的实现?

2026-05-06 19:340阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1088个文字,预计阅读时间需要5分钟。

MySQL如何确保ACID特性(原子性、一致性、隔离性、持久性)的实现?

MySQL 的 ACID 并不是依靠一句 `START TRANSACTION` 就自动生效的,它依赖于 InnoDB 存储引擎底层的日志与锁机制协同工作。MyISAM 等引擎基本不支持事务,因此第一步必须确认使用的是 `InnoDB`。

原子性靠 undo log 回滚日志实现

事务执行过程中,每条 INSERT/UPDATE/DELETE 操作前,InnoDB 都会把原始数据(或逻辑前像)写入 undo log。一旦事务中途失败或显式调用 ROLLBACK,系统就按这条日志“倒带”恢复——不是删记录,而是把旧值重新填回去。

  • undo log 在事务开始时分配段(segment),写入速度比直接改数据页快,且先落盘(受 innodb_flush_log_at_trx_commit 影响)
  • 注意:SELECT 不生成 undo log,只有 DML 才触发
  • 长事务会阻碍 undo log 回收,导致 ibdata1 文件膨胀,这是线上容易被忽略的磁盘隐患

持久性靠 redo log 重做日志保证

事务提交(COMMIT)时,InnoDB 并不立即将变更刷进表空间文件(.ibd),而是先把修改操作记到 redo log 中,并按配置策略强制刷盘。崩溃重启后,MySQL 会重放这些日志,把未写入数据文件的已提交事务补全。

阅读全文
标签:Mysql

本文共计1088个文字,预计阅读时间需要5分钟。

MySQL如何确保ACID特性(原子性、一致性、隔离性、持久性)的实现?

MySQL 的 ACID 并不是依靠一句 `START TRANSACTION` 就自动生效的,它依赖于 InnoDB 存储引擎底层的日志与锁机制协同工作。MyISAM 等引擎基本不支持事务,因此第一步必须确认使用的是 `InnoDB`。

原子性靠 undo log 回滚日志实现

事务执行过程中,每条 INSERT/UPDATE/DELETE 操作前,InnoDB 都会把原始数据(或逻辑前像)写入 undo log。一旦事务中途失败或显式调用 ROLLBACK,系统就按这条日志“倒带”恢复——不是删记录,而是把旧值重新填回去。

  • undo log 在事务开始时分配段(segment),写入速度比直接改数据页快,且先落盘(受 innodb_flush_log_at_trx_commit 影响)
  • 注意:SELECT 不生成 undo log,只有 DML 才触发
  • 长事务会阻碍 undo log 回收,导致 ibdata1 文件膨胀,这是线上容易被忽略的磁盘隐患

持久性靠 redo log 重做日志保证

事务提交(COMMIT)时,InnoDB 并不立即将变更刷进表空间文件(.ibd),而是先把修改操作记到 redo log 中,并按配置策略强制刷盘。崩溃重启后,MySQL 会重放这些日志,把未写入数据文件的已提交事务补全。

阅读全文
标签:Mysql