第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)