MySQL事务的ACID特性分别是什么

雨敏同学_9467

雨敏同学_9467

2026-08-11

590人浏览

原创

原子性指事务操作“全做或全不做”,由undo log实现:事务出错或回滚时,innodb利用undo log将未提交的修改恢复至初始状态;一致性是acid协同结果,依赖原子性、隔离性、持久性及约束校验共同保障数据合法状态。

mysql事务的acid特性分别是什么

原子性(Atomicity):事务必须“全做或全不做”

MySQL 的原子性靠 undo log 实现。当事务执行中途出错或被显式调用 ROLLBACK,InnoDB 会用 undo log 把已修改但未提交的数据回退到事务开始前的状态。

  • 如果你只执行了 UPDATE 但没 COMMIT,其他事务看不到这次修改,这是原子性和隔离性共同作用的结果
  • START TRANSACTION 后的每条语句不是立即生效,而是先写入变更日志,等 COMMIT 才真正落盘
  • 常见误操作:在存储过程里漏写 ROLLBACK 分支,导致部分语句已执行却无法撤回

一致性(Consistency):不是由单一机制保证,而是 ACID 协同结果

一致性本身不对应某个独立日志或锁,它是原子性、隔离性、持久性共同达成的效果——数据库从一个合法状态变到另一个合法状态。

  • 外键约束、CHECK 约束、唯一索引这些规则在事务提交时校验,违反则自动 ROLLBACK
  • 比如转账前后总金额不变,这不是 MySQL 主动计算的,而是靠你写的 SQL 逻辑 + 约束 + 原子性共同守住的
  • 容易忽略的点:应用层逻辑错误(比如少扣一笔钱)不会触发一致性保护,MySQL 只管它能检测的规则

隔离性(Isolation):靠 MVCC + 锁控制并发可见性

InnoDB 默认隔离级别是 REPEATABLE READ,主要通过多版本并发控制(MVCC)实现快照读,配合行锁处理当前读。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • SELECT 是快照读(不加锁),看到的是事务启动时的一致视图;而 SELECT ... FOR UPDATE 或 UPDATE 是当前读(加锁),看到最新已提交数据
  • READ COMMITTED 下每次 SELECT 都重新生成快照,REPEATABLE READ 下整个事务复用同一个快照
  • 幻读在 REPEATABLE READ 下仍可能发生(比如 INSERT 新行),需用 SELECT ... FOR UPDATE 或升级到 SERIALIZABLE

持久性(Durability):靠 redo log 和刷盘策略保障

事务提交后,InnoDB 先把变更写入内存中的 redo log buffer,再刷到磁盘的 redo log 文件,最后才异步刷脏页到表空间。

  • innodb_flush_log_at_trx_commit 参数决定刷盘时机:1(每次提交都刷,最安全)、0(每秒刷一次,有丢事务风险)、2(写 OS 缓存,不强制刷盘)
  • 即使 mysqld 进程崩溃,只要 redo log 已落盘,重启时就能重放日志恢复数据
  • 注意:binlog 不参与 crash recovery,它只用于主从复制和逻辑备份

ACID 四个特性看似独立,实则环环相扣。比如没有 undo log 就保不住原子性,没有原子性和隔离性,一致性就无从谈起;而持久性若失效,前面三者做的努力可能白费。实际调优时,不能只盯着单个特性改参数。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4323

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

911

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1129

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6241

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3083

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6220

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8441

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1150

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1012

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习