数据库系统基础教程-第6章-数据库语言SQL(5).pptVIP

数据库系统基础教程-第6章-数据库语言SQL(5).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
只读事务 通常,多个访问同一数据的只读事务可以并行执行,但是多个写同一数据的事务不能并行执行。 例6.43 从例6.40的关系Flights读取数据来判断某个座位是否是空闲的程序。 该程序只读数据不写数据,其并行执行不会对数据库造成永久性伤害; 最坏情况是:客户可能损失掉选择最喜欢位置的机会 只读、读写的设置 SET TRANSACTION READ ONLY SET TRANSACTION READ WRITE 6.6 SQL中的事务 读脏数据 脏数据:未提交事务所写的数据 脏读取:对脏数据的读取 允许明确指定一个给定的事务可以读脏数据 ISOLATION LEVEL READ UNCOMMITED 读脏数据的风险 写数据的事务夭折,脏数据被移走,像不曾存在。如果别的事务读了这个脏数据,并提交对脏数据的计算或使用。 读脏数据有时出问题,有时无关紧要,当读脏数据无关紧要时,允许读脏数据可以避免 DBMS用来预防读脏数据所做的费时的工作 因等待而未去读脏数据造成的并发性的丢失 6.6 SQL中的事务 * 例6.44:以下述步骤进行账户转移 1. 将钱加到账户2 2.检测账户1是否有足够的钱 a) 没有:从账户2减去此金额 (相当于回滚) b) 有:从账户1减去此金额 假设有可能读脏数据,且存在两个事务在同一时刻执行的事务T1和T2: 账户:A1($100) A2 ($200) A3($300) T1 $150? T2 $250? 可能的执行顺序: T2 将$250 加到A3;A3有$550 T1 将$150 加到A2;A2有$350 T2测试,A2有足够金额($350,脏数据);允许转账 T1测试,A1没有足够金额($100);不允许转账 T2:从A2减去$250 A2有$100 结束 T1:从A2减去$150 A2有-$50 结束(T1回滚) * 例6.45:座位选择新方法 1. 发现有效座位,seatStatus=‘occuped’占用。 若无有效座位,结束。 2. 问顾客是否要此座位,若要则提交。 若不要,seatStatus=‘available’,重复步骤1,再选。 * T2只是因读脏数据,失去选喜欢的座位的机会 …… T1 顾客放弃座位1 occ=FALSE T2 发现座位1占用 不能选 T1 occ=TRUE 占用座位1 假设可能读脏数据,且可能的事务执行顺序: 并发操作可能导致三种数据库状态不一致的情况: 脏读:事务读取还未被提交的数据; 不可重复读:事务两次读取同一行数据,但每次得到的数据都不一样; 幻读:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据 6.6 SQL中的事务 为了解决这些问题,数据库引入了“锁”的机制(从数据库系统的角度来看:分为排它锁,共享锁和更新锁。 隔离层次 四种隔离层次: 1. 可串行化(serializable) 2. 读未提交(read-uncommitted) 3. 读提交(read-committed) 4. 可重复读(repeatable-read) * * 第六章 数据库语言SQL 四种隔离级别 “读未提交” READ UNCOMMITED 最低等级的事务隔离,仅仅保证了读取过程中不会读取到非法数据,对事务可以看到的信息不加限制; “读提交” READ COMMITED 大多数主流数据库的默认事务等级,只有那些被已提交事务写入的元组才可以被这个事务看到,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。 6.6 SQL中的事务 可重复读REPEATABLE READ 查询得到的每个元组在此查询再次执行时必须重现,保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 可串行化SERIALIZABLE(缺省) 最高等级的事务隔离,上面3种不确定情况都将被规避。这个级别将模拟事务的串行执行。 6.6 SQL中的事务 第六章 数据库语言SQL 第二章 关系数据模型 * 第六章 数

文档评论(0)

yyons2019 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档