網络数据库讲稿(并发控制机制).docVIP

  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文档。上传文档
查看更多
網络数据库讲稿(并发控制机制)

并发控制机制 一、并发控制的概念 SQL Server是多用户系统,即支持多个不同的程序或多个用户独立执行同一个程序同时存取数据库中相同的数据。多个事务交迭地执行,称为并发处理。并发处理可能会导致数据完整性与一致性方面的问题,如丢失更新、读出的是未提交的数据、非一致检索的问题等。为此,必须对这种并发操作提供一定的控制以防止它们彼此干扰,从而保证数据库的正确性不被破坏,这种处理就是并发控制。当多个事务交错执行时,可能出现不一致性的问题,也称为并发控制问题,典型的并发处理产生的错误结果有如下三种。现以一个库存进出的实例进行分析。 假设当前某商品S1的在库数量是200,现在有两个并发事务T1和T2都将更新在库存中的数量, T1是采购入库事务,T2是卖出出库事务,即 事务完成后的计算结果 T1:入库400 库存数量=库存数量+400 T2:出库80 库存数量=库存数量-80 表1给出了在正常情况下这些事务的执行顺序和正确的结果,正确的最后执行结果应该是520。 表1 两个事务正常执行的过程 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T1 库存数量=库存数量+400 3 T1 将结果写回数据库 600 4 T2 读库存数量 600 5 T2 库存数量=库存数量-80 6 T2 将结果写回数据库 520 由于事务的处理是并发执行的,它们执行的过程流可能是交替的,如表2的执行过程,在这种执行顺序中会产生丢失更新时事务的执行顺序,表中当第二个事务T2执行时,T1还未提交。 表2 发生数据丢失更新的过程 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T2 读出库存数量 200 3 T1 库存数量=库存数量+400 4 T2 库存数量=库存数量-80 5 T1 将结果写回数据库 600(将被丢失) 6 T2 将结果写回数据库 120 在表2中,由于事务T1和T2是交替执行的,在将更新的结果写回数据库时,T1写入后马上由T2写入它所计算出的值,此时最后数据库中的结果是120,与表1中所得出的结果是完全不同的, 因此,如果对数据库更新时的并发事务不加以控制,将会出现大量的不可预期的错误结果。2.读未提交数据当两个事务T1和T2并发执行时,在T1对数据库更新的结果没有提交之前,T2使用了T1的结果,如果在T2读取数据之后T1又撤消事务,就可能引起错误。读未提交数据产生的根源是违反了事务的隔离性。仍以上述实例来讨论。假定事务T1在增加了400个商品后,在没有提交之前撤消了这个操作,所以事务T2应该是从原来的库存数量200中减去80,正确结果应该是120。正确的操作顺序和结果如表3所示。 表3 两个事务正常的执行顺序 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T1 库存数量=库存数量+400 3 T1 将结果写回数据库 600 4 T1 **ROLLBACK** 200 5 T2 读出库存数量 200 6 T2 库存数量=库存数量-80 7 T2 将结果写回数据库 120 当T1和T2的交替执行步骤如表4时,T2使用了T1末提交的数据,从而产生了错误数据520。 我们把读出的这种未提交的数据称为废数据或者脏数据。 表4 T2使用T1未提交数据后产生的错误 事务 步骤 数据库中结果 1 T1 读出库存数量 200 2 T1 库存数量=库存数量+400 3 T1 将结果写回数据库 600 4 T2 读出库存数量 600 5 T2 库存数量=库存数量-80 6 T1 **ROLLBACK** 200 7 T2 将结果写回数据库 520 3.不,一个事务可能对同一个数据连续读两次,然而事务的并发执行可能导致在两次读之间插入了另一个更新事务,这样会使前一个事务的两次读出的同一个数据值不一致,这就是不问题。由于事务很可能读某些变化之前或变化之后的数据,就可能产生不一致的结果。总之,一个数据库事务中可能包含多个输入/输出操作,最终结果将使数据库从一个一致性的状态变成另一个一致性的状态,即在事务执行之前或之后数据库处于一致性的状态。然而,在事务的执行期问,数据库可能暂时处于一个不一致性的状态。若在数据库不一致性状态时读取数据,就有可能产生一些问题。解决这类问题的常用方法是对所修改的对象进行封锁,实现事务的隔离性。排它 (X) 锁可以防止并发事务对资源进行访问。其它事务不能读取或修改排它 (X) 锁锁定的数据。共享 (S) 锁允许并发事务读取 (SELECT) 一个资源。资源上存在共享 (S) 锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别

文档评论(0)

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

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

1亿VIP精品文档

相关文档