479 字
2 分钟
MySQL 事务的 ACID 特性分别是什么
ACID 是事务的四个目标:原子性(Atomicity)保证事务中的操作全做或全不做;一致性(Consistency)要求事务前后满足业务约束;隔离性(Isolation)控制并发事务彼此可见的程度;持久性(Durability)保证已提交结果在故障后仍可恢复。ACID 不是四个互不相关的开关,也不代表数据库能自动理解所有业务规则。
InnoDB 通过 Undo Log 支持回滚和旧版本读取,以实现原子性相关能力;锁与 MVCC 实现不同隔离级别;Redo Log 支持崩溃后的已提交修改恢复。约束、事务边界和应用校验共同维护一致性,例如唯一约束可以防止重复邮箱,但“账户余额不得低于信用额度”仍需由正确的事务逻辑和约束保证。持久性还受 innodb_flush_log_at_trx_commit、存储设备和复制配置影响,不能只凭“用了事务”推断机器断电后绝对不丢数据。
START TRANSACTION;UPDATE account SET balance = balance - 100 WHERE id = 1;UPDATE account SET balance = balance + 100 WHERE id = 2;COMMIT;转账两步必须在同一事务中;若第二步失败,应回滚第一步。事务还应检查影响行数、金额精度和余额约束,避免把数据库原子性误当作业务正确性。
追问
- ACID 中一致性由数据库单独保证吗? 不完全。数据库约束和事务提供机制,应用仍需设计正确的业务规则和事务操作。
- 隔离性越高越好吗? 不一定。更强隔离通常降低并发或增加冲突,需要按异常读风险与吞吐量选择。
- 提交返回成功就一定不会丢吗? 需要结合 InnoDB 刷盘配置、硬件是否正确执行 flush,以及复制确认策略判断。
MySQL 事务的 ACID 特性分别是什么
https://blog.xqcherry.top/posts/interview/mysql/acid-transactions/ 目录