1
第 10章 数据库的事务处理
?10.1 事务( Transaction) 的概念
?10.2 事务的状态
?10.3 事务的特性
?10.4 SQL Server中的事务
2
10.1 事务( Transaction) 的概念
?事务 是用户定义的数据库操作序列, 这些操作可作为
一个完整的工作单元 。 一个事务内的所有语句是一个整
体, 要么全部执行, 要么全部不执行 。 即事务是不可再
分的原子性工作 。
如在银行业务中,, 从帐户 A转移资金 X到帐户 B”就是一
个典型的事务 。 这个事务可以分解为两个动作:
( 1) 从账户 A减去金额 X。
( 2) 在账户 B中加上金额 X。
3
?基本术语
? 中止事务,执行中发生故障、不能停止执行完成的事
务;
? 事务回滚( ROLLBACK ),将中止事务对数据库所作
的更新撤销掉。
? 已提交事务,成功地执行完成的任务。
10.2 事务的状态
4
?事务的基本操作包括,
?事务开始 ( BEGIN_TRANSACTION) 。 事务开始执行 。
?事务读写 ( Read/Write) 。 事务进行数据操作 。
?事务结束 ( END_TRANSACTION) 。 事务完成所有的读 /写操
作 。
?事务交付 ( COMMIT_TRANSACTION) 。 事务完成所有的读 /写
操作, 并保存操作结果 。
5
活动状态
失败状态
部分提交状态 提交状态
中止状态
图 10.1 事务状态图
?事务的状态:
6
10.3 事务的特性
事务所必须具有的重要特性包括:
( 1) 原子性 ( Atomicity) 。 一个事务是一个不可分割
的工作单位, 事务在执行时, 应该遵守, 要么不做, 要
么全做, 的原则, 即不允许事务部分的完成 。
?即使因为故障而使事务未能完成, 它执行的部分结果
要被取消 。
7
( 2) 一致性 ( Consistency) 。 所谓数据库的一致状态
是指数据库中的数据满足完整性约束 。
例如, 银行企业中,, 从帐号 A转移资金额 R到帐号 B”
是一个典型的事务, 这个事务包括两个操作, 从帐
号 A中减去资金额 R和在帐号 B中增加资金额 R,如果
只执行其中一个操作, 则数据库处于不一致状态,
帐务会出现问题 。 也就是说, 两个操作要么全做,
要么全不做, 否则就不能成为事务 。
? 可见事务的一致性与原子性是密切相关的 。
8
( 3) 隔离性 ( Isolation) 。 如果多个事务并发地执行,
应像各个事务独立执行一样, 一个事务的执行不能被
其他事务干扰 。 即一个事务内部的操作及使用的数据
对并发的其他事务是隔离的 。
? 并以控制 就是为了保证事务间的隔离性 。
( 4) 持久性 ( Durability) 。 指一个事务一旦提交, 它
对数据库中数据的改变就应该是持久的, 即使数据库
因故障而受到破坏, DBMS也应该能够恢复 。
9
? 上述的四个特性也简称为 ACID特性, 保证 ACID特性
是事务处理的重要任务 。 事务的 ACID特性可能遭到破
坏的原因有:
1) 多个事务并行运行时, 不同事务的操作交叉执行 。
2) 事务在运行过程中被强迫停止 。
? 下面是一个事务的例子
10
? 例如 一个事务, 从帐号 A转移资金额 R到帐号 B:
BEGINTRANSACTION
READ A
A←A -R
IFA<0 /*A 款不足 */
THEN
BEGIN
DISPLAY,A款不足,
ROLLBACK
END
ELSE /* 拨款 */
BEGIN
B←B+R
DISPLAY,拨款完成,
COMMIT
END
11
? 以上是对一个简单事务的完整的描述。
? 该事务有两个出口:
① 当 A 帐号的款项不足时,事务以 ROLLBACK(撤销)命
令结束,即撤销该事务的影响;
② 另一个出口是以 COMMIT(提交)命令结束,完成从帐
号 A到帐号 B的拨款。
? 在 COMMIT之前,即在数据库修改过程中,数据可能是
不一致的,事务本身也可能被撤销。
? 只有在 COMMIT之后,事务对数据库所产生的变化才对
其他事务开放,这就可以避免其他事务访问不一致或
不存在的数据。
12
10.4 SQL Server中的事务
? SQL Server的事务分为两种类型:
? 系统提供的事务。 系统提供的事务是指在执行某些语
句时,一条语句就是一个事务,它的数据对象可能是
一个或多个表(视图),可能是表(视图)中的一行
数据或多行数据;
? 用户定义的事务 。用户定义的事务以 BEGIN
TRANSACTION语句开始,以 COMMIT或
ROLLBACK结束。其中:
? BEGINTRANSACTION,事务的开始标记 。
? COMMIT TRANSACTION,事务的结束标记 。
? ROLLBACK TRANSACTION,回滚 。