mysql中ACID特性指的是什么_mysql ACID特性说明

13次阅读

ACID是mysql事务的四大核心原则,由InnoDB等引擎通过Undo Log、MVCC、redo Log等机制协同实现:原子性保障操作全成功或全回滚;一致性确保数据始终满足约束;隔离性避免并发干扰;持久性保证提交后数据不丢失。

mysql中ACID特性指的是什么_mysql ACID特性说明

MySQL 中的 ACID 特性是事务(Transaction)必须满足的四大核心原则,用于保障并发环境下的数据可靠性与一致性。它不是 MySQL 自身的“功能开关”,而是 InnoDB 等事务型存储引擎通过底层机制(如日志、锁、快照)实现的一组行为承诺。

原子性(Atomicity):操作不可拆分

事务中的所有 SQL 操作被视为一个整体:要么全部成功提交(COMMIT),要么全部失败回滚(ROLLBACK),不允许部分生效。

  • 典型场景:银行转账——A 账户扣款和 B 账户入账必须同时完成或同时撤销
  • InnoDB 实现依赖 Undo Log:记录修改前的数据镜像,回滚时按日志逆向恢复
  • 注意:只有 InnoDB、NDB 等支持事务的引擎才具备原子性;MyISAM 不支持

一致性(Consistency):状态始终合法

事务执行前后,数据库必须从一个满足完整性约束的有效状态,转移到另一个同样有效的状态。

  • 约束包括:主键唯一、外键关联、CHECK 条件、非空/类型校验等
  • 一致性不是由单一机制保证,而是原子性、隔离性、持久性的共同结果
  • 应用层也要参与:比如余额不能为负,需在 SQL 或业务逻辑中显式控制

隔离性(Isolation):并发互不干扰

多个事务同时运行时,彼此的操作不应造成意外影响。MySQL 提供四种隔离级别,默认为 REPEATABLE READ

  • READ UNCOMMITTED:可能读到未提交数据(脏读)
  • READ COMMITTED:避免脏读,但可能不可重复读
  • REPEATABLE READ(默认):避免脏读和不可重复读;InnoDB 用 MVCC + 间隙锁尽量规避幻读
  • SERIALIZABLE:最严格,强制串行执行,开销最大

持久性(Durability):提交即永久保存

一旦事务成功 COMMIT,其对数据的修改就应永久保留,即使发生断电、崩溃等故障也不丢失。

  • InnoDB 采用 WAL(Write-Ahead Logging)机制:先写 Redo Log 到磁盘,再异步刷脏页
  • 崩溃恢复时,MySQL 会重放 Redo Log 中已提交事务的修改
  • Redo Log 是顺序写,性能高;而直接写数据文件是随机写,效率低

ACID 是一个协同体系:原子性防止“半途而废”,隔离性防止“互相踩脚”,持久性防止“功亏一篑”,最终共同服务于一致性的目标。

text=ZqhQzanResources