第5篇第数据库原理5.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库原理与技术 (第二版) 程学先 程传慧 曾 玲 陈永辉 郑秋华 杨晓艳 【例】假设账号为0027-654321的客户购买10件商品代码K01的商品,设这10件商品的总价为200.00元。 根据业务规则,在执行购买事务时,应当完成如下的操作过程: UPDATE 库存表 SET 库存量=库存量-10 WHERE 商品代码=‘K01’ UPDATE 进账表 SET 金额=金额+200.00 WHERE 账号=‘0027-654321’ ; SQL的事务管理 事务提交COMMIT 将该事务对数据库的所有更新写入到磁盘的物理数据库中,事务正常结束。 事务撤消ROLLBACK(回滚) 指系统将该事务对数据库的所有已完成的更新操作全部撤消,恢复到事务开始前的一致的状态。 在SQL语言对数据库的操作中,一般都是按照用户或应用程序所规定的事务流程顺序执行,直到遇到下列情况之一为止: 执行COMMIT语句:说明对数据库的所有操作都已存入数据库中。COMMIT语句自动结束SQL的事务,并开始新的事务。 执行ROLLBACK语句:说明要撤消对事务开始后的所有对数据库的操作,并且使数据库回滚到事务开始之前的一致性的状态。 程序正常结束:这种情况说明对数据库的所有修改已存入数据库中。 程序被非常终止:说明对数据库的所有改变被撤消,数据库回滚到原来一致性状态。 说明:在执行一个完整的事务处理时,应该设定事务的管理子句。 如对上例的购买事务,应为: UPDATE 库存表 SET 库存量=库存量-10 WHERE 商品代码=‘K01’ UPDATE 进账表 SET 金额=金额+200.00 WHERE 账号=‘0027-654321’ COMMIT; 并发控制 在多用户的数据库系统中,多个事务交迭地执行,称为并发处理。 并发处理可能会导致数据完整性与一致性方面的问题,如丢失更新、读出的是未提交的数据、非一致检索的问题等。 DBMS系统必须对这种并发操作提供一定的控制以防止它们彼此干扰,从而保证数据库的正确性不被破坏,DBMS所提供的这种处理就是并发控制。 并发处理产生的三种不一致性 丢失数据 读未提交数据 不一致性检索 丢失数据 【例】假设当前某商品S1的在库数量是200,现在有两个并发事务T1和T2都将更新库存中的数量,T1是采购入库事务,T2是卖出出库事务,即 事务 事务完成后的计算结果 T1:入库400 库存数量=库存数量+400 T2:出库80 库存数量=库存数量-80 执行顺序 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T1 库存数量=库存数量+400 3 T1 将结果写回数据库 600 4 T2 读库存数量 600 5 T2 库存数量=库存数量-80 80 6 T2 将结果写回数据库 520 如上表所示,在正常情况下这些事务的执行顺序和正确的结果,正确的最后执行结果应该是520。 执行顺序 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T2 读出库存数量 200 3 T1 库存数量= 库存数量+400 4 T2 库存数量= 库存数量-80 5 T1 将结果写回数据库 600(将被丢失) 6 T2 将结果写回数据库 120 在此表中,由于事务T1和T2是交替执行的,在将更新的结果写回数据库时,T1写入后马上由T2写入它所计算出的值,此时最后数据库中的结果是120,与上表中所得出的结果是完全不同的。 因此,如果对数据库更新时的并发事务不加以控制,将会出现大量的不可预期的错误结果!!! 读未提交数据 当两个事务T1和T2并发执行时,在T1对数据库更新的结果没有提交之前,T2使用了T1的结果,如果在T2读取数据之后T1又撤消事务,就可能引起错误。 读未提交数据产生的根源是违反了事务的隔离性。 仍以上述实例来讨论。 假定事务T1在增加了400个商品后,在没有提交之前撤消了这个操作,此时事务T2将从原来的库存数量200中减去80,得到的结果应该是120,其操作顺序和结果如下表所示。 执行顺序 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T1 库存数量=库存数量+400 600 3 T1 将结果写回数据库 600 4 T1 **ROLLBACK** 200 5 T2 读出库存数量 200 6 T2 库存数量=库存数量-80 7 T2 将

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档