1、1事务v如银行转帐问题:假定资金从帐户 A转到帐户 B, 至少需要两步: 帐户 A的资金减少 然后帐户 B的资金相应增加v创建数据库并开设两个账户账户 A 账户 B余额余额 :1000元元 余额余额 :1元元银行转帐 转账转账 1000元元余额余额 :0元元 余额余额 :1001元元A转入 B1000元创建帐户表,存放用户的帐户信息添加约束:根据银行规定,帐户余额不能少于 1元,否则视为销户 2模拟转帐v开户后两个帐户的v余额总和 为: 1000+1=1001元模拟实现转帐 :从张三的帐户转帐1000元到李四的帐户余额总和 =2001元请问 :执行转帐语句后,张三、李四的帐户余额为多少?v错误
2、分析 :执行失败,故张三还是 1000元原因 UPDATE语句违反约束:余额 =1元v解决方法 :使用 事务事务3事务的概念v事务 (Transaction):事务是 用户定义 的一个数据库 操作序列 ,这些操作作为 一个不可分割的工作单元 , 要么全做,要么全不做 。数据库 恢复 和 并发控制 的 基本单位数据库系统中 通常有多个事务并行运行v事务和程序 是 两个概念在关系数据库中, 一个事务 可以是 一条 SQL语句 , 一组 SQL语句 或 整个程序一个 应用程序 通常 包含多个事务4事务的特性 (ACID特性 )v原子性 (Atomicity)事务是一个完整的操作 。事务的各步操作是不
3、可分的 (原子的 );要么都执行,要么都不执行v一致性 (Consistency)事务在完成时 , 必须使所有的数据都保持一致状态 ,以保持所有数据的完整性。即所有的 内部数据结构 (如 B 树索引或双向链表) 都必须是正确的 。v隔离性 (Isolation)对并发 执行的事务, 一个事务的执行不能被其他事务干扰各个事务之间不能互相干扰在同一事务内部 操作及使用的数据 对其他并发事务是隔离的v持续性 (Durability)事务完成后 ,它 对数据库的修改被永久保持 ,接下来的其他操作或故障不应该对其执行结果有任何影响。5DBMS中的事务控制v隐式的事务控制 :用户 未显式地定义事务 时,
4、DBMS按缺省规定自动划分事务说明 :事实上,有时一条 SQL语句的工作也有事务特点 例如一条删除多行数据的 SQL语句。v显式的事务控制 :事物的开始与结束由用户显示地控制 实际开发中 通常用显示事务 ,明确指定事务的起、止边界vSQL语言中定义事务的语句Begin transaction 事务开始Commit 事务提交 ,正常结束,将更新结果写入磁盘 COMMIT语句还释放资源,如事务使用的锁。Rollback 事务回滚 ,撤销事务中所有已完成的更新 当事务中出现错误,或者用户决定取消事务时,可回滚该事务,将数据返回到事务开始时的状态,并释放事务占用的资源6使用事务解决银行转帐问题v判断某
5、条语句执行是否出错:v使用 全局变量ERROR可判断当前 SQL语句执行是否有错v为判断事务中所有 SQL语句是否有错,可对错误进行累计;如:vSET errorSum=errorSum+error7查看转帐 1000的结果转帐事务过程中转帐事务结束后8事务管理的内容v引起事务不完全的三个故障原因 :由于出现异常,中途中止或不成功退出;可能因电源等故障,系统崩溃;遇到如不能访盘等异常状态而中止。vACID准则的保证 :不仅在 系统正常 如此,在 系统故障时 也应如此;在 单个事务执行时 如此,在 事务并发执行时 也应如此。v故障恢复 :保证事务在故障时满足 ACID准则的技术;v并发控制 :保
6、证事务在并发执行时满足 ACID准则的技术;v事务管理 : 故障恢复和并发控制的合称。9五 .并发控制v为什么需要并发控制数据库系统是 多用户共享 的系统;数据库管理系统 必须提供并发控制机制 ;多个用户并发地存取数据库时 会产生多个事务同时存取同一数据 的情况。v实例分析 : 考虑飞机订票系统中的一个活动序列1) 甲售票点 (甲事务 )读出某航班的 机票余额 A, 设 A=16;2) 乙售票点 (乙事务 )读出同一航班的 机票余额 A, 也为 16;3) 甲售票点 卖出一张机票, 修改余额 A=A-1; 所以 A为 15,把 A写回数据库;4) 乙售票点 也卖出一张机票, 修改余额 A=A-
7、1; 所以 A为 15,把 A写回数据库。结果明明卖出两张机票, 数据库中机票余额只减少 1。10多事务执行方式(1)事务串行执行每个时刻只有一个事务运行 ,其他事务必须等到这个事务结束以后方能运行特点 : 不能充分利用资源 ,数据库资源难以共享(2)交叉并发方式 (interleaved concurrency)并行执行 事务的各个操作轮流交叉运行特点 :在 单处理机系统 中的并发方式,能够 减少处理机的空闲时间 ,提高系统的效率(3)同时并发方式 (simultaneous concurrency)多个处理机同时运行 ,其中每个 处理机分别运行一个事务 ,能实现多个事务真正并行运行特点 : 最理想 的并发方式,但受制于硬件环境