|
知识路径: > 数据库技术 > 事务管理 > 事务的基本概念 > 事务的基本概念 >
|
相关知识点:4个
|
|
|
|
|
如果不出现故障,那么所有事务都能执行完成。一旦在执行过程中发生故障,不能执行完成的事务称为中止事务;将中止事务对数据库的更新撤销称为事务回滚;成功执行完成的事务称为已提交事务。
|
|
|
中止的事务是可以回滚的,通过回滚恢复数据库,保持数据库的一致性,这是DBMS的责任。已提交的事务是不能回滚的,必须由程序员或DBA手工执行一个“补偿事务”才能撤销提交的事务对数据库的影响。
|
|
|
注意:事务一旦提交,就不能中止它,而要撤销已提交事务所造成影响的唯一方法是执行一个补偿事务(Compensating Transaction)。比如一个事务给账户A加了600元,其补偿事务是对账户A减去600元。实际上不是总能够创建这样的补偿事务。
|
|
|
|
事务是数据库的基本执行单元。事务的执行情况有两种可能:一种情况是事务成功执行,数据库进入一个新的一致状态;另一种情况是事务因为故障或其他原因未能够成功执行,但已经对数据库做了修改。未能成功执行的事务极有可能导致数据库处于不一致状态,这时候就需要对未能成功执行的事务(也称中止事务)造成的变更进行撤销操作(也称回滚ROLLBACK)。如果中止事务造成的变更已经撤销,就称事务已回滚。
|
|
|
成功完成的事务称为已提交事务。对数据库进行更新的已提交的任务使数据库进入一个新的状态,即使出现系统故障,这个状态必须保持。另一方面,成功提交的事务不能通过中止来撤销而造成的影响,必须采用执行一个称为“补偿事务”的方法来撤销。
|
|
|
|
为了更明确地描述事务的执行过程,一般将事务的执行状态分为五种,事务必须处于这五种状态之一。事务各种状态含义说明如下:
|
|
|
(1)活动状态:事务的初始状态,事务执行时处于这个状态。
|
|
|
(2)部分提交状态:当操作序列的最后一条语句自动执行后,事务处于部分提交状态。这时,事务虽然已经完全执行,但由于实际输出可能还临时驻留在内存中,在事务成功完成前仍有可能出现硬件故障,事务仍有可能不得不中止。因此,部分提交状态并不等于事务成功执行。
|
|
|
(3)失败状态:由于硬件或逻辑等错误,使得事务不能继续正常执行,事务就进入了失败状态。处于失败状态的事务必须进行回滚(ROLLBACK)。这样,事务就进入了中止状态。
|
|
|
(4)中止状态:事务回滚并且数据库恢复到事务开始执行前的状态。
|
|
|
(5)提交状态:当事务成功完成后,称事务处于提交状态。只有事务处于提交状态后,才能说事务已经提交。
|
|
|
|
|
|
|
事务状态转换操作命令如下表所示,可以通过在事务中执行相关操作,实现事务状态的转换。
|
|
|
|
|
需要说明的是,事务进入中止状态后,系统一般有如下两种选择:
|
|
|
(1)重启事务。当事务中止的原因是软、硬件错误而不是事务内部逻辑错误时,一般采用重启事务的方法。重启事务可以被看成一个新事务。
|
|
|
(2)杀死事务。这样做通常是因为事务中止的原因是事务内部的逻辑错误,或者是输入错误,也可能是所需数据在数据库中没找到等原因。
|
|
|