事务

更新:2007 年 11 月

事务这一概念的提出是为了处理某些情况,在这些情况中数据库的结果状态取决于一系列操作是否全部成功。之所以这样,是因为后面的操作可能会修改先前操作的结果。在这些情况下,如果任意一个操作失败,结果状态将不确定。

为解决这一问题,事务以一种最终结果的完整性可以得到保障的方式将系列操作进行分组。或者所有的操作必须成功,然后提交(写入数据库),或者整个事务失败。取消事务称为回滚。回滚允许恢复所做的更改,将数据库返回至事务前状态。

例如,在一次自动银行事务中,如果将一笔款从 A 帐户转入 B 帐户,则从 A 帐户取款和存入 B 帐户都必须成功才能正确处理该笔款项,否则整个事务必定失败。

事务必须具有 ACID 属性,它代表以下意思:

  • 原子性   事务是工作的原子单元,它的执行是一次性的,要么所有工作都完成,要么都没有完成。

  • 一致性   事务保持数据的一致性,把数据的一种一致状态转换为另一种一致状态。必须在语义上保留事务绑定的数据。

  • 隔离   事务是一个隔离单元,并发事务中的每个事务在发生时都相互分离,彼此独立。一个事务决不应看到另一事务的中间阶段。

  • 持久性   事务是一个恢复单元。如果事务成功,其更新就保持,即使系统发生故障或者关闭也如此。如果事务失败,则系统保持提交该事务前的状态。

可在 OLE DB 或 ODBC 中支持事务(请分别参阅在 OLE DB 中支持事务事务 (ODBC))。

分布式事务是用于更新分布式数据(即位于一个以上网络计算机系统上的数据)的事务。如果希望在分布式系统上支持事务,应使用 Microsoft .NET Framework 而不是 OLE DB 事务支持。

有关 Microsoft .NET Framework 中的事务的信息,请参见 Windows 软件开发工具包 (SDK) 中的处理事务

请参见

概念

数据访问编程