第8章2012传.ppt

第8章2012传

数据库并发控制 数据库的不一致是由事务操作调度不当引起的 第八章 并发控制 8.1 事务的基本概念 8.2 并发操作的调度 8.3 封锁和封锁协议 8.4 活锁和死锁 8.5 可串行性和两段锁协议 银行转帐问题 假定资金从帐户A转到帐户B,至少需要两步: 帐户A的资金减少 然后帐户B的资金相应增加 假定张三的帐户直接转帐1000元到李四的帐户 目前两个帐户的余额总和为:1000+1=1001元 模拟实现转帐 从张三的帐户转帐1000元到李四的帐户 错误原因分析: 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 一个不可分割的工作逻辑单元 3 如何创建事务 T-SQL使用下列语句来管理事务: 开始事务:BEGIN TRANSACTION 提交事务:COMMIT TRANSACTION 回滚(撤销)事务:ROLLBACK TRANSACTION 一旦事务提交或回滚,则事务结束。 判断某条语句执行是否出错: 使用全局变量@@ERROR; @@ERROR判断当前一条T-SQL语句执行是否有错 如: SET @errorSum=@errorSum+@@error 如何创建事务 使用事务解决银行转帐问题 如何创建事务 演示:转帐1000,转帐失败的情况 如何创建事务 演示:转帐800,转帐成功的情况 4 事务的特性(ACID特性) 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ) 原子性 事务是一个完整的操作; 事务中包含的数据库操作要么都做,要么都不做,不可分割。 一致性 数据库应用程序由若干个事务组成 事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态 持续性 永久性(Permanence) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 隔离性 对并发执行而言 一个事务的执行不能被其他事务干扰 并发执行的各个事务之间不能互相干扰 设某银行存款帐户数据如下表: 程序完成两项功能:存款与取款。 每次操作完成后向明细表中插入一行记录并更新帐户余额。 解决办法: ①将新的记录插入表中 ② 根据存、取款金额计算出新的帐户余额 真的这么简单? 在不考虑并发问题的情况下是可行的 如果考虑并发,问题就多了 第八章 并发控制 8.1 事务的基本概念 8.2 并发操作的调度 8.3 封锁和封锁协议 8.4 活锁和死锁 8.5 可串行性和两段锁协议 串行方式 多事务的调度方式 串行方式 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点 并行方式 多事务的调度方式 并行方式(simultaneous concurrency) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行 最理想的并发方式,但受制于硬件环境 交叉并发方式 多事务的调度方式 交叉并发方式(interleaved concurrency) 多个事务的同时轮流交叉运行 是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率 数据库的不一致是由并发操作引起的 数据不一致情况 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read) 避免出现如上问题的关键   当一个事务访问某个数据项时,应不允许其他事务修改该数据项 复习 事务的特性(ACID特性) 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ) 交叉并发调度问题 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read) 避免出现如上问题的关键   当一个事务访问某个数据项时,应不允许其他事务修改该数据项 第八章 并发控制 8.1 事务的基本概念 8.2 并发操作的调度 8.3 封锁和封锁协议 8.4 活锁和死锁 8.5 可串行性和两段锁协议 排它锁 排它锁又称为写锁(eXclusive lock) 若事务T对数据对象A加上X锁,则只允许T读取和修改A 其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁 共享锁 共享锁又称为读锁(Share lock) 若事务T对数据对象A加上S锁,T可以读取A 其它事务只能再对A加S锁,而不

文档评论(0)

1亿VIP精品文档

相关文档