1. 什么是事务
事务(Transaction)是数据库管理系统执行过程中的一个逻辑工作单元,由一组 SQL 操作组成。事务内的操作要么全部成功提交,要么全部失败回滚,不会出现部分成功、部分失败的情况。
例如,银行转账操作中,从 A 账户扣款和向 B 账户加款必须作为一个整体执行。如果扣款成功但加款失败,整个事务必须回滚,保证数据的一致性。
2. 事务的四个特性(ACID)
事务的四个特性通常简称为 ACID,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
2.1 原子性(Atomicity)
原子性要求事务是一个不可分割的整体,事务中的所有操作要么全部成功,要么全部失败。事务执行过程中如果发生错误,系统会通过回滚(Rollback)将数据恢复到事务开始前的状态。
以转账为例:扣款和加款两个操作必须同时成功或同时失败,不能出现只扣款不加款的情况。
2.2 一致性(Consistency)
一致性要求事务执行前后,数据库都必须处于一致的状态,即满足所有预定义的约束规则,如主键约束、外键约束、唯一约束、非空约束等。
一致性是事务的最终目标,原子性、隔离性和持久性都是为一致性服务的。事务完成后,数据必须从一个一致状态转换到另一个一致状态。
2.3 隔离性(Isolation)
隔离性要求多个事务并发执行时,彼此之间互不干扰,一个事务的执行不能被其他事务干扰。每个事务都感觉不到其他事务在并发执行,就像在独立运行一样。
数据库通过锁机制和多版本并发控制(MVCC)来实现隔离性。隔离级别从低到高分为:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
2.4 持久性(Durability)
持久性要求事务一旦提交成功,其对数据库的修改就是永久性的,即使系统发生崩溃或断电,修改的数据也不会丢失。
数据库通常通过写日志(如 Redo Log)和定期备份来实现持久性。事务提交时,系统会将修改记录写入持久化存储,确保数据在故障后可以恢复。
3. ACID 特性之间的关系
ACID 四个特性相互配合,共同保证数据库的可靠性:
- 原子性是基础,保证事务操作的整体性。
- 一致性是目标,保证数据始终满足约束规则。
- 隔离性是手段,保证并发事务互不干扰。
- 持久性是保障,保证提交后的数据不丢失。
4. 总结
事务的四个特性 ACID 是关系型数据库可靠性的核心保障。原子性保证操作不可分割,一致性保证数据始终合法,隔离性保证并发安全,持久性保证数据不丢失。理解 ACID 是掌握数据库事务处理和并发控制的基础。