事务状态

2025年5月20日 | 阅读 3 分钟

引言

一个 事务 是在数据库上执行的一组操作,这些操作被视为作为一个整体执行,但实际上在执行过程中会经历几个阶段。

DBMS States of Transaction

不同的事务状态如下。

活动状态

  • 活动状态是每个事务的第一个状态。在此状态下,事务正在执行。
  • 例如:记录的插入、删除或更新在此处完成。但所有记录尚未保存到数据库。

部分提交

  • 在部分提交状态下,事务执行其最终操作,但数据仍未保存到数据库。
  • 在总分计算示例中,最终显示总分步骤在此状态下执行。

已提交

当一个事务成功执行所有操作时,它就处于已提交状态。在此状态下,所有更改都已永久保存在数据库系统中。

失败状态

  • 如果数据库恢复系统进行的任何检查失败,则该事务处于失败状态。
  • 在总分计算的例子中,如果数据库无法执行查询来获取分数,那么事务将执行失败。

中止

  • 如果任何检查失败并且事务达到了失败状态,那么数据库恢复系统将确保数据库处于其先前的稳定状态。如果不是,它将中止或回滚事务以使数据库恢复到稳定状态。
  • 如果事务在事务中间失败,则在执行事务之前,所有已执行的事务都将被回滚到其稳定状态。
  • 中止事务后,数据库恢复模块将选择以下两个操作之一:
    1. 重新启动事务
    2. 终止事务

终止状态

  • 这是事务的最终状态。当事务在已提交或不完整阶段后完成其生命周期时,它最终进入已完成状态。

在数据库中,事务可以处于以下状态之一:

DBMS States of Transaction

在上图中,很清楚,当事务开始时,即执行事务的第一个语句时,它处于活动状态。当事务执行最后一个语句时,它进入部分提交状态,这强制 DBMS 反映对数据库所做的更改。

在到达部分提交状态和到达已提交状态之间,可能由于硬件故障导致事务无法将所有修改传播到数据库,从而使事务进入中止状态(通过失败状态)。

当系统确定事务由于逻辑错误或硬件故障而无法继续正常执行时,事务会进入失败状态。然后应回滚事务,回滚后进入中止状态。当事务中止时,系统有两个选项:重新启动或终止事务。失败或中止的事务可以稍后自动重新启动或由用户重新提交。

为了允许用户指示事务的边界,许多数据操作语言提供了诸如 ROLLBACK、COMMIT 或等效的关键字。 如果没有提供这些,那么所有进程都将被视为单个进程,由 DBMS 自动处理这些任务。

关于事务状态的常见问题

1. 列出事务的各种状态。

  • Active
  • 部分提交
  • 已提交
  • Failed
  • 中止
  • 被终止雇佣 (Terminated)

2. 部分提交状态是什么意思?

如果事务中的所有操作都成功完成,并且它进入了初始提交状态,指示 DBMS 反映对数据库所做的更改,那么事务就会进入部分提交状态。


下一主题DBMS 调度