事务(Transaction)是在数据库上执行的一个单一的、逻辑上的工作单元,通常是一系列逻辑相关的操作的组合。
以转账场景为例,它包含了几个相关的步骤:
- 判断转出账户是否拥有足够的金额,如果不够则直接终止转账流程。
- 从转出账户减去转账的金额。
- 向目标账户增加相同的金额。
这三个逻辑上相关联的操作共同组成了一个转账事务。
除了逻辑上的抽象,事务在数据库中有一个额外的保证,即事务中的整个操作序列将被视为一个不可分割的整体来处理。
如果在执行一个事务的中间发生了问题,例如机器在从转出账户减钱后、向目标账户加钱前崩溃了。在数据库重启之后,数据库会根据策略自动继续执行第三步向目标账户加钱,或者回滚(Rollback)至事务开始前还未对转出账户减钱时的状态。要么全成功,要么全失败。