资源预览内容
第1页 / 共74页
第2页 / 共74页
第3页 / 共74页
第4页 / 共74页
第5页 / 共74页
第6页 / 共74页
第7页 / 共74页
第8页 / 共74页
第9页 / 共74页
第10页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理数据库事务管理数据库事务管理(数据库一致性数据库一致性)事务并发控制事务并发控制数据库故障恢复数据库故障恢复信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理第八章第八章并发控制并发控制8.1 事务的基本概念事务的基本概念 8.2 并发操作的调度并发操作的调度 8.3 封锁和封锁协议封锁和封锁协议 8.4 活锁和死锁活锁和死锁 8.5 可串行性和两段锁协议可串行性和两段锁协议信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理银行转帐银行转帐银行转帐问题银行转帐问题 假定资金从帐户假定资金从帐户A转到帐户转到帐户B,至少需要至少需要 两步两步: 帐户帐户A的资金减少的资金减少然后帐户然后帐户B的资金相应增加的资金相应增加帐户帐户A帐户帐户B信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理假定张三的帐户直接转帐假定张三的帐户直接转帐1000元到李四的帐户元到李四的帐户 CREATE TABLE bank ( customerName CHAR(10), - - 顾客姓名 currentMoney MONEY CHECK(currentMoney=1) - - 当前余额 ) GO INSERT INTO bank(customerName,currentMoney) VALUES(张三,1000) INSERT INTO bank(customerName,currentMoney) VALUES(李四,1)创建帐户表,存放用户的帐户信息创建帐户表,存放用户的帐户信息添加约束:根据银行规定,帐户 余额不能少于1元,否则视为销户添加约束:根据银行规定,帐户 余额不能少于1元,否则视为销户张三开户,开户金额为1000元 ;李四开户,开户金额1元张三开户,开户金额为1000元 ;李四开户,开户金额1元信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理目前两个帐户的余额总和为目前两个帐户的余额总和为:1000+1=1001元元信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理模拟银行转帐模拟银行转帐从张三的帐户转帐从张三的帐户转帐1000元到李四的帐户元到李四的帐户/*- - 转帐测试:张三转账1000元给李四- - */ - - - - 张三的帐户少1000元,李四的帐户多1000元 UPDATE bank SET currentMoney=currentMoney- 1000 WHERE customerName=张三 UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四 GO - - 再次查看转帐后的结果。 SELECT * FROM bank GO请问: 执行转帐语句后,张三、李四的 帐户余额为多少?请问: 执行转帐语句后,张三、李四的 帐户余额为多少?张三的帐户没有减少但李四的帐户却多了1000元100010012001元 总额多出了1000元!张三的帐户没有减少但李四的帐户却多了1000元100010012001元 总额多出了1000元!信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理- - 张三的帐户减少1000元,李四的帐户增加1000元 UPDATE bank SET currentMoney=currentMoney- 1000 WHERE customerName=张三 UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四 GO错误原因分析错误原因分析:UPDATE语句违反约束: 余额=1元UPDATE语句违反约束: 余额=1元执行失败执行失败,所以张三还是所以张三还是1000元元执行失败执行失败,所以张三还是所以张三还是1000元元继续往下执行继续往下执行:执行成功执行成功,所以李四变为所以李四变为1001元元继续往下执行继续往下执行:执行成功执行成功,所以李四变为所以李四变为1001元元如何解决呢如何解决呢?使用使用事务事务如何解决呢如何解决呢?使用使用事务事务信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理事务事务(TRANSACTION)是作为单个逻辑工作单元是作为单个逻辑工作单元 执行的一系列数据库操作执行的一系列数据库操作 操作序列作为一个整体一起向系统提交操作序列作为一个整体一起向系统提交,要么都要么都 执行执行、要么都不执行要么都不执行 一个不可分割的操作单位一个不可分割的操作单位转帐过程就是一个事务转帐过程就是一个事务。它需要两条它需要两条UPDATEUPDATE语句来完成语句来完成,这两条语句是一个整体这两条语句是一个整体, 如果其中任一条出现错误如果其中任一条出现错误,则整个转帐业务也应取消则整个转帐业务也应取消,两两 个帐户中的余额应恢复到原来的数据个帐户中的余额应恢复到原来的数据,从而确保转帐前和从而确保转帐前和 转帐后的余额不变转帐后的余额不变,即都是即都是10011001元元。 什么是事务什么是事务什么是事务什么是事务信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理2 2 事务的特性事务的特性事务的特性事务的特性(ACID(ACID特性特性特性特性) ) 原子性原子性(原子性原子性(AtomicityAtomicity) 一致性一致性(一致性一致性(ConsistencyConsistency) 隔离性隔离性(隔离性隔离性(IsolationIsolation) 持续性持续性(持续性持续性(DurabilityDurability )信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理 原子性原子性原子性原子性事务是一个完整的操作事务是一个完整的操作;事务是一个完整的操作事务是一个完整的操作;事务中包含的数据库操作要么都做事务中包含的数据库操作要么都做,要要事务中包含的数据库操作要么都做事务中包含的数据库操作要么都做,要要么都不做么都不做,不可分割不可分割。么都不做么都不做,不可分割不可分割。信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理 一致性一致性一致性一致性数据库应用程序由若干个事务组成数据库应用程序由若干个事务组成 事务执行的结果必须是使数据库从一个事务执行的结果必须是使数据库从一个事务执行的结果必须是使数据库从一个事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态一致性状态变到另一个一致性状态一致性状态变到另一个一致性状态一致性状态变到另一个一致性状态信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理 持续性持续性持续性持续性 永久性永久性(Permanence)一个事务一旦提交一个事务一旦提交,它对数据库中数据的改它对数据库中数据的改变就应该是永久性的变就应该是永久性的。信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理 隔离性隔离性隔离性隔离性对并发执行而言对并发执行而言对并发执行而言对并发执行而言 一个事务的执行不能被其他事务干扰一个事务的执行不能被其他事务干扰一个事务的执行不能被其他事务干扰一个事务的执行不能被其他事务干扰 并发执行的各个事务之间不能互相干扰并发执行的各个事务之间不能互相干扰并发执行的各个事务之间不能互相干扰并发执行的各个事务之间不能互相干扰信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理开始状态开始状态失败状态失败状态事务执行事务执行提交状态提交状态 commit中止状态中止状态初始状态初始状态事务无法继事务无法继 续正常执行续正常执行事务回滚事务回滚 ,数据库恢数据库恢 复到事务开始前状态复到事务开始前状态数据操作数据操作,写写 入磁盘缓冲区入磁盘缓冲区成功完成成功完成,永永 久写入数据库久写入数据库事务生命周期事务生命周期事务生命周期事务生命周期3 3 事务的状态事务的状态事务的状态事务的状态信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理4 4 如何创建事务如何创建事务如何创建事务如何创建事务T- SQL使用下列语句来管理事务使用下列语句来管理事务: 开始事务开始事务:BEGIN TRANSACTION 提交事务提交事务:COMMIT TRANSACTION 回滚回滚(撤销撤销)事务事务:ROLLBACK TRANSACTION 一旦事务提交或回滚一旦事务提交或回滚,则事务结束则事务结束。判断某条语句执行是否出错判断某条语句执行是否出错: 使用全局变量使用全局变量ERROR;ERROR判断当前一条判断当前一条T- SQL语句执行是否有错语句执行是否有错 如如: SET errorSum=errorSum+error信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理 关键语句讲解 BEGIN TRANSACTION /*- - 定义变量,用于累计事务执行过程中的错误- - */ DECLARE errorSum INT SET errorSum=0 - - 初始化为0,即无错误 /*- - 转帐:张三的帐户少1000元,李四的帐户多1000元*/ UPDATE bank SET currentMoney=currentMoney- 1000 WHERE customerName=张三 SET errorSum=errorSum+error UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四 SET errorSum=errorSum+error - - 累计是否有错误使用事务解决银行转帐问题开始事务(指定事务从此处开始, 后续的T- SQL语句都是一个整体)开始事务(指定事务从此处开始, 后续的T- SQL语句都是一个整体)累计是否有错误累计是否有错误信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理IF errorSum0 - - 如果有错误 BEGIN print 交易失败,回滚事务 ROLLBACK TRANSACTION END ELSE BEGIN print 交易成功,提交事务,写入硬盘,永久的保存 COMMIT TRANSACTION END GO print 查看转帐事务后的余额 SELECT * FROM bank GO根据是否有错误,确定 事务是提交还是撤销根据是否有错误,确定 事务是提交还是撤销如果有错,则回滚操作,事务结束如果有错,则回滚操作,事务结束如果成功,则提交操作,事务结束如果成功,则提交操作,事务结束信息工程学院计算机系信息工程学院计算机系数据库系统原理数据库系统原理数据库系统原理数据库系统原理转帐事务前转帐事务前转帐事务过程中转帐事务过
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号