- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(事务四种隔离级别分析
数据库事务四种隔离级别详述
大多数事务系统使用的SQL标准中定义了四种隔离级别:可串行化、不可重复都、读已提交和读未提交。我们通过下面的这个例子来对这四种隔离级别进行详细的说明。
场景:假如资源库里有两个包,分别是加锁包和多步提交包,其中加锁包中的文件个数是7个,而多步提交包中的文件个数是5个。现在Martin将要统计资源目录中的所有包的个数,而同时,David要向资源库里更新包的个数,即David将要向加锁包里再提交2个文件,向多步提交包里在提交3个文件。
由于,Martin的统计和David的更新是并发执行的,所以,下面将描述在使用某种隔离级别的情况下,会出现什么样的结果。
可串行化:执行情况是要不Martin先统计,统计完成后David再统计,或者David更新完成后,Martin再更新。这样,系统保证Martin的结果不是12或17,它们都是正确的,但是可串行化可能无法保证同样条件下多次运行后会得到相同的结果。第一次运行Martin统计的结果是12,第二次统计的结果就变成了17。
读已提交:它允许不可重复读。不可重复读的大致意思是,你第一次读取的数据假如是A,由于外界的干扰,那你在使用相同条件第二次读取的数据将会覆盖掉第一次读取的数据,即先前读取的结果A将不可重现。以上面场景为例,假如Martin从加锁包里读取的文件数是7,接着,David提交了更新,这时,Martin再从加锁包里读取文件个数,则得出的结果变成了9,以前的7将不可重现。可重复读的概念和不可重复读概念相反,即如果允许可重复读,则即使David提交了更新,Martin从加锁包里读出的文件个数还是7。
可重复读:可重复读的概念在上面介绍了,可重复读可能会出现幻读。至于幻读,还是可以用上面例子来描述:首先,Martin从加锁包里读出7个文件,这时,David提交了更新(另一个事务),Martin又从多步提交包里读出8个文件,于是统计得出了一个错误的结果,即7+8=15。出现幻读的原因是读的结果只对Martin事务一部分有效,而不是对整个事务有效,而且通常是由于插入数据造成的。
读未提交:最低的隔离界别。可能会出现幻读、脏读以及不可重复读等。在这种隔离级别下,允许一个事务读取其它事务还未提交的数据。例如:Martin可能会在David刚往加锁包中添加完文件还没向多步提交包中添加文件时,就统计了David往加锁包中添加的文件,即统计结果为2+7+5=14。而此时,David事务并没提交,假如David更新成功,成功提交了事务,统计结果应该为17,或者David更新失败,事务回滚,统计结果应该为12。
DB2四种隔离级别(Isolation Levels)详解
维护数据库的一致性和数据完整性,同时又允许多个应用程序同时访问同一数据,这样的特性称为并发性。DB2数据库用来尝试强制实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据。DB2使用下列隔离级别来强制实施并发性:
● 可重复读(Repeatable Read)
● 读稳定性(Read Stability)
● 游标稳定性(Cursor Stability)
● 未提交读(Uncommitted Read)
可重复读隔离级别可以防止所有现象,但是会大大降低并发性(可以同时访问同一资源的事务数量)。未提交读隔离级别提供了最大的并发性,但是“脏读”、“幻像读”和“不可重复读”都可能出现。默认的隔离级别是CS。
10.3.1 可重复读(RR—Repeatable Read)
可重复读隔离级别是最严格的隔离级别。在该隔离级别下,一个事务的影响完全与其他并发事务隔离,脏读、不可重复的读、幻像读现象都不会发生。当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。因此,如果在同一个事务中发出同一个SELECT语句两次或更多次,那么产生的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或回滚操作终止该事务。但是,在事务存在期间,不允许其他事务执行会影响这个事务正在访问的任何行的插入、更新或删除操作。为了确保这种行为不会发生,锁定该事务所引用的每一行—— 而不是仅锁定被实际检索或修改的那些行。因此,如果一个事务扫描了1000行,但只检索10行,那么它所扫描的1000行(而不仅是被检索的10行)都会被锁定。
那么在现实环境中可重复读隔离级别是如何工作的呢?假定如家酒店使用DB2数据库跟踪如家酒店的客房信息,包括房间预订和房价信息,还有一个基于Web的应用程序,它允许顾客按“先到先服务”的原则预订房
文档评论(0)