事务(Transaction)是在数据库上执行的一个单一的、逻辑上的工作单元,通常是一系列逻辑相关的操作的组合。

以转账场景为例,它包含了几个相关的步骤:

  1. 判断转出账户是否拥有足够的金额,如果不够则直接终止转账流程。
  2. 从转出账户减去转账的金额。
  3. 向目标账户增加相同的金额。

这三个逻辑上相关联的操作共同组成了一个转账事务。

除了逻辑上的抽象,事务在数据库中有一个额外的保证,即事务中的整个操作序列将被视为一个不可分割的整体来处理。

如果在执行一个事务的中间发生了问题,例如机器在从转出账户减钱后、向目标账户加钱前崩溃了。在数据库重启之后,数据库会根据策略自动继续执行第三步向目标账户加钱,或者回滚(Rollback)至事务开始前还未对转出账户减钱时的状态。要么全成功,要么全失败。

在事务并发时,仍然有可能出现一些异常,例如读未提交等。对此,数据库通常会提供事务隔离级别避免这些异常现象。

ACID