Skip to content
难度基础(★)
建议时长45分钟

3.8.2 事务的特性

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

事务是数据库执行的逻辑单位

事务是一组数据库操作构成的逻辑工作单位。它可以包含多条读写操作,但从业务角度看应当作为一个整体成功或失败。转账是最典型的例子:甲账户减 100 和乙账户加 100 必须一起成立。

事务通常经历:

mermaid
stateDiagram-v2
  [*] --> Begin
  Begin --> Active: 执行读写
  Active --> Commit: 全部成功
  Active --> Rollback: 出错或主动撤销
  Commit --> [*]: 修改持久生效
  Rollback --> [*]: 撤销已做修改

ACID 四特性

字母特性关键词转账例子
A原子性 Atomicity要么全做,要么全不做扣款成功但入账失败时,扣款也要撤销
C一致性 Consistency从一个一致状态到另一个一致状态总金额守恒,约束不被破坏
I隔离性 Isolation并发事务互不可见张三转账不应读到李四事务的中间状态
D持久性 Durability提交后永久有效COMMIT 后即使故障,结果也不丢

这四个特性不是孤立的。原子性和持久性依赖日志与恢复机制,隔离性依赖并发控制,一致性则是业务约束和数据库机制共同保证的目标。

原子性:失败就回滚

原子性强调事务内部操作不可只完成一半。若转账事务执行到“甲账户扣款”后失败,而乙账户没有入账,数据库必须通过 ROLLBACK 把扣款撤销,让事务像从未发生过一样。

状态含义
BEGIN事务开始
COMMIT成功提交,全部修改生效
ROLLBACK回滚,撤销已做修改

题干出现“全部成功或全部失败”“要么提交要么回滚”,基本对应原子性。

持久性:提交后故障也不能丢

持久性强调事务一旦 COMMIT,即使数据库随后崩溃,更新结果也应永久有效。字幕里讲到数据库通常依赖日志:先写日志,再写数据。系统恢复时扫描日志,把已有 COMMIT 标记的事务加入 redo 队列,从 BEGINCOMMIT 的操作重新做一遍,保证提交结果不丢失。

机制对应作用
日志记录事务修改轨迹
REDO重做已提交事务,保证持久性
UNDO/ROLLBACK撤销未完成事务,保证原子性

题干说“提交后更新还在缓冲区,故障后不会丢失”,答案是持久性,不是原子性。

一致性与隔离性

一致性强调事务执行前后数据库满足约束。例如转账前后账户总额不应凭空变化,外键约束、余额非负等业务规则不应被破坏。

隔离性强调并发事务互不干扰。一个事务在完成前,对其他事务的中间修改不应随意可见。并发执行时最容易破坏的就是隔离性,因此需要封锁协议等机制。

做题路线

  1. “全做/全不做、回滚”对应原子性。
  2. “一致状态到一致状态、满足约束”对应一致性。
  3. “并发互不影响、事务间不可见”对应隔离性。
  4. “提交后不丢失、故障后仍有效、redo”对应持久性。

例题

单选
事务中操作要么全部完成,要么全部不做,体现:
单选
事务提交后,其结果应永久保存在数据库中,体现:

自查要点

  1. ACID 四个字母分别代表什么?
  2. 原子性和持久性如何区分?
  3. 隔离性和并发控制有什么关系?