为了完成对数据的操做,企业应用常常要求并发访问在多个构件之间共享的数据。这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义):
分布式访问一个单独的数据资源,以及从一个单独的应用构件访问分布式资源。
在这种状况,可能要求在(分布式)资源上的一组操做被看成一个工做单元(unit)。在一个工做单元中, 操做的全部部分一块儿成功或失败并恢复。在下面的状况下这个问题更加复杂:
经过一组分布式的、访问多个资源的数据的构件实现一个工做单元,和/或部分操做是被顺序执行的或在要求协调和/或同步的并行线程中。
在全部状况下, 都要求应用维护一个工做单元的成功或失败。在失败的状况下,全部资源要把数据状态返回到之前的状态
(好比说,工做单元开始前的状态)。
事务的概念和和事务管理器(或者一个事务处理服务)在一个工做单元中的维护数据完整性,这就简化了这样的企业级别分布式应用的构造。
一个事务是有下列属性的一个工做单元:
原子性(ATOMICITY):
一个事务要被彻底的无二义性的作完或撤消。在任何操做出现一个错误的状况下,构成事务的全部操做的效果必须被撤消,数据应被回滚到之前的状态。
一致性(CONSISTENCY):
一个事务应该保护全部定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一个一致-状态转换到另外一个一致状态。举个例子,在关系数据库的状况下,
一个一致的事务将保护定义在数据上的全部完整性约束。
隔离性(ISOLATION):
在同一个环境中可能有多个事务并发执行,而每一个事务都应表现为独立执行。串行的执行一系列事务的效果应该同于并发的执行它们。这要求两件事:
在一个事务执行过程当中,数据的中间的(可能不一致)状态不该该被暴露给全部的其余事务。
两个并发的事务应该不能操做同一项数据。数据库管理系统一般使用锁来实现这个特征。
持久性(DURABILITY):
一个被完成的事务的效果应该是持久的。
****************************************************************************************************************************************************************************************************************************数据库
****************************************************************************************************************************************************************************************************************************数据结构
【考点】 数据库事务基础知识。 【出现频率】 ★★★☆☆ 【解答】 事务提供了一种机制,可用来将一系列数据库更改纳入一个逻辑操做。更改数据库后,所作的更改能够做为一个单元进行提交或取消。事务可确保遵循原子性、一致性、隔离性和持续性(ACID)这几种属性,以使数据可以正确地提交到数据库中。 使用事务机制的好处很是明显,例如银行转帐之类的交易操做中,事务有着重要的做用。事务的成功取决于事务单元账户相互依赖的操做行为是否能所有执行成功,只要有一个操做行为失败,整个事务将失败。例如:客户A和客户B的银行帐户金额都是10000元人民币,客户A须要把本身账户中的5000元人民币转到客户B的帐户上。这个过程看似简单,实际上涉及了一系列的数据库操做,能够简单地视为两步基本操做,即从客户A账户的金额中扣除5000元人民币,以及将客户B账户中金额添加5000元人民币。假设第1步数据库操做成功,而第二步失败的话,将致使整个操做失败,而且客户A账户金额将被扣除5000元人民币。事务机制能够避免此类状况,以保证整个操做的完成,若是某步操做出错,以前所做的数据库操做将所有失效。 【分析】 事务是单个的工做单元。若是某个事务成功,则在该事务中进行的全部数据更改均会提交,成为数据库中的永久组成部分。若是事务遇到错误且必须取消或回滚,则全部数据更改均被清除。一个逻辑工做单元必须有ACID属性,只有这样才能成为一个事务。ACID属性有如下4个属性。 1.原子性 事务必须是原子工做单元。对于其数据修改,要么全都执行,要么全都不执行。 2.一致性 事务在完成时,必须使全部的数据都保持一致状态。在相关数据库中,全部规则都必须应用于事务的修改,以保持全部数据的完整性。事务结束时,全部的内部数据结构都必须是正确的。 3.隔离性 由并发事务所作的修改必须与任何其余并发事务所作的修改隔离。事务识别数据时数据所处的状态,或者是另外一个并发事务修改它以前的状态,或者是第二个事务修改它以后的状态,事务不会识别中间状态的数据。这称为可串行性,由于它可以从新装载起始数据,而且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。 4.持久性 事务完成以后,它对于系统的影响是永久性的。该修改即便出现系统故障也将一直保持。 事务有如下3种运行模式。 q 自动提交事务:每条单独的语句都是一个事务。 q 显式事务:每一个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。 q 隐性事务:在上个事务完成时新事务隐式启动,但每一个事务仍以COMMIT或ROLLBACK语句显式完成。 说明:还有一种批处理级事务模式,该模式仅应用于多活动结果集(MARS),在MARS会话中启动的Transact-SQL显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由SQL Server进行回滚。