事务的特性

事务的ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)

原子性

  • 事务时不可分割的逻辑工作单位

  • 事务中包含的所有操作要么都做,要么都不做

  • 事务的所有操作在数据库中要么全部反映出来,要么完全不反映

一致性

以隔离方式执行事务(即,没有其他事务的并发执行)以保持数据库的一致性;事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

  • 一致性状态:数据库中只包含成功事务提交的结果

  • 不一致状态:数据库中包含失败事务的结果

事务状态

在不出现故障的情况下,所有的事务都能成功完成。成功完成的事务称为已提交事务,完成更新的已提交事务使数据库进入一个新的一致性状态,即使出现系统故障,这个状态也必须保持。

一旦事务已提交,就不能通过中止它来撤销其造成的影响。撤销已提交事务所造成影响的唯一方法是执行一个补偿事务

例如如果一个事务给一个账户加上了200元,其补偿事务应当从该账户中减去200元。

书写和执行补偿事务的责任留给用户,而不是由数据库系统处理。

为了进一步明确一个事务成功完成的含义,建立一个简单的抽象事务模型。

事务必须处于以下状态之一:

  • 活动状态(active):初始状态

  • 部分提交状态(partially committed)最后一条语句被执行之后

  • 失败状态(failed):发现正常的执行不能继续之后

  • 中止状态(aborted)事务回滚并且数据库已被恢复到事务开始执行前到状态之后

  • 提交状态(committed):成功完成之后

隔离性

对并发执行而言,一个事务的执行不能被其他事务干扰,一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性

持续性也称为永久性(Permanence)

  • 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

  • 接下来的其他操作或故障不应该对其执行结果有任何影响

  • 即,在一个事务成功完成之后,它对数据库的改变必须是永久的,即使出现系统故障也是如此


事务是恢复和并发控制的基本单位,保证事务ACID特性是事务处理的任务。破坏事务ACID特性的因素有:

  • 事务在运行过程中被强行停止

    DBMS必须保证被强行终止的事务对数据库和其他事务没有任何影响

  • 多个事务并行运行时,不同事务的操作交叉执行

    DBMS必须保证多个事务的交叉运行不影响这些事务的原子性

DBMS的恢复机制并发控制机制来保证

Last updated