全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

MySQL 事务ACID特性

事务是数据库操作的基本单位,ACID 特性保证数据操作的可靠性和一致性。

ACID 四大特性

特性英文说明
原子性Atomicity事务不可分割,要么全做要么全不做
一致性Consistency事务前后数据状态一致
隔离性Isolation并发事务之间相互隔离
持久性Durability事务提交后永久保存

原子性 Atomicity

SQL
-- 事务要么全部成功,要么全部失败
START TRANSACTION;

-- 转账操作:A账户扣款,B账户加款
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 如果任何一步失败,整个事务回滚
COMMIT;   -- 全部成功,提交
-- 或 ROLLBACK; -- 失败时回滚

原子性通过 Undo Log 实现:

  • 事务执行前记录数据旧值
  • 回滚时根据 Undo Log 恢复原数据

一致性 Consistency

SQL
-- 转账前后总金额不变
-- 假设 A 有 500,B 有 300,总额 800
START TRANSACTION;
UPDATE accounts SET balance = 400 WHERE id = 1;  -- A扣100
UPDATE accounts SET balance = 400 WHERE id = 2;  -- B加100
COMMIT;
-- 总额仍为 800,保持一致

一致性保障:

  • 数据库约束(主键、外键、唯一等)
  • 应用层逻辑校验
  • 原子性 + 隔离性 共同保证

隔离性 Isolation

SQL
-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- 查看当前隔离级别
SELECT @@transaction_isolation;
隔离级别说明问题
READ UNCOMMITTED读未提交脏读、不可重复读、幻读
READ COMMITTED读已提交不可重复读、幻读
REPEATABLE READ可重复读幻读
SERIALIZABLE序列化无问题,性能最低

隔离性通过 锁机制MVCC 实现。

持久性 Durability

SQL
-- 事务提交后,数据永久保存
START TRANSACTION;
INSERT INTO orders VALUES (1, '商品A', 100);
COMMIT;  -- 提交后即使断电数据也不丢失

持久性通过 Redo Log 实现:

  • 事务提交时先写 Redo Log
  • 数据库崩溃后可根据 Redo Log 恢复

事务控制语句

SQL
-- 开启事务
START TRANSACTION;
BEGIN;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

-- 设置保存点
SAVEPOINT sp1;
ROLLBACK TO sp1;  -- 回滚到保存点

默认情况下 MySQL 自动提交(autocommit=1),需手动开启事务。

要点总结

  • 原子性:事务不可分割,Undo Log 保证回滚
  • 一致性:数据状态前后一致,约束+逻辑保证
  • 隔离性:并发事务隔离,锁+MVCC 实现
  • 持久性:提交后永久保存,Redo Log 保证恢复

📝 发现内容有误?点击此处直接编辑

← 上一篇 MySQL MVCC多版本并发控制
下一篇 → MySQL 事务隔离级别
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库