🌟 MySQL 事务的四大特性(ACID)
事务是一条或多条 SQL 语句组成的执行单元,要么全部执行成功,要么全部失败,不会出现部分执行的情况。
事务具有四个基本特性,也就是通常所说的 ACID 特性,即原子性、一致性、隔离性和持久性。主要作用是保证数据库操作的一致性。
什么是原子性?
原子性子性意味着事务中的所有操作要么全部完成,要么全部不完成,它是不可分割的单位。如果事务中的任何一个操作失败了,整个事务都会回滚到事务开始之前的状态,如同这些操作从未被执行过一样。
什么是一致性?
一致性确保事务从一个一致的状态转换到另一个一致的状态。
什么是隔离性?
隔离性意味着并发执行的事务是彼此隔离的,一个事务的执行不会被其他事务干扰。就是事务之间是井水不犯河水的。
隔离性主要是为了解决事务并发执行时可能出现的问题,如脏读、不可重复读、幻读等。
数据库系统通过事务隔离级别(如读未提交、读已提交、可重复读、串行化)来实现事务的隔离性。
什么是持久性?
持久性确保事务一旦提交,它对数据库所做的更改就是永久性的,即使发生系统崩溃,数据库也能恢复到最近一次提交的状态。通常,持久性是通过数据库的恢复和日志机制来实现的,确保提交的事务更改不会丢失。
四大特性(ACID)总结
特性 | 名称 | 英文缩写 | 作用解释 |
---|---|---|---|
A | 原子性 | Atomicity | 事务中的所有操作,要么全部完成,要么全部不做,不可分割 |
C | 一致性 | Consistency | 事务执行前后,数据库要处于一致状态(满足所有约束) |
I | 隔离性 | Isolation | 多个事务并发执行时,互不干扰,仿佛每个事务都独立进行 |
D | 持久性 | Durability | 一旦事务提交,修改会永久保存到数据库,即使系统宕机也不会丢失 |
通过现实中的一个例子帮助你更好理解👇
🎯 生活类比场景(ATM 转账)
假设你使用 ATM 向朋友转账 100 元:
- 原子性:系统会先从你账户扣除 100 元,再给你朋友加 100 元。这两个操作必须一起成功或一起失败。不能出现你扣了钱但对方没收到。
- 一致性:无论系统发生什么变动,总金额不变(你-100,他+100,总额没变)。
- 隔离性:在你转账过程中,另一个人不能读到转账“中间状态”,例如你已经扣了钱但对方还没收到。
- 持久性:转账成功后,即使系统崩了、掉电了,数据库也要能“恢复”这个交易结果。
🔐 ACID 的技术实现
特性 | 实现机制 | 技术细节 |
---|---|---|
原子性 | 回滚日志(Undo Log) | 使用 Undo 日志回滚失败的操作 |
一致性 | ACID 整体保障 | 依赖事务机制和应用逻辑(如外键、约束等) |
隔离性 | 隔离级别(4种) | 通过 MVCC、锁机制(行锁、间隙锁等)来实现 |
持久性 | 重做日志(Redo Log) | 提交事务时先写入 Redo 日志,宕机可恢复 |
🧠 Mermaid 图表助记(事务四大特性)
🔎 面试常问陷阱:
问题 | 解答思路 |
---|---|
ACID 中哪个特性最容易被破坏? | 隔离性(尤其是高并发时) |
如何保证原子性? | 使用 Undo Log 实现回滚机制 |
InnoDB 是如何实现持久性的? | 提交前写入 Redo Log,崩溃后可重放恢复 |
ACID 和 CAP 有什么不同? | ACID 是数据库事务的标准,CAP 是分布式系统理论 |