事务四种隔级别分析.doc

事务四种隔级别分析.doc

ID:58474268

大小:25.00 KB

页数:5页

时间:2020-05-15

事务四种隔级别分析.doc_第1页
事务四种隔级别分析.doc_第2页
事务四种隔级别分析.doc_第3页
事务四种隔级别分析.doc_第4页
事务四种隔级别分析.doc_第5页
资源描述:

《事务四种隔级别分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据库事务四种隔离级别详述大多数事务系统使用的SQL标准中定义了四种隔离级别:可串行化、不可重复都、读已提交和读未提交。我们通过下面的这个例子来对这四种隔离级别进行详细的说明。场景:假如资源库里有两个包,分别是加锁包和多步提交包,其中加锁包中的文件个数是7个,而多步提交包中的文件个数是5个。现在Martin将要统计资源目录中的所有包的个数,而同时,David要向资源库里更新包的个数,即David将要向加锁包里再提交2个文件,向多步提交包里在提交3个文件。由于,Martin的统计和David的更新是并发

2、执行的,所以,下面将描述在使用某种隔离级别的情况下,会出现什么样的结果。可串行化:执行情况是要不Martin先统计,统计完成后David再统计,或者David更新完成后,Martin再更新。这样,系统保证Martin的结果不是12或17,它们都是正确的,但是可串行化可能无法保证同样条件下多次运行后会得到相同的结果。第一次运行Martin统计的结果是12,第二次统计的结果就变成了17。读已提交:它允许不可重复读。不可重复读的大致意思是,你第一次读取的数据假如是A,由于外界的干扰,那你在使用相同条件第二次

3、读取的数据将会覆盖掉第一次读取的数据,即先前读取的结果A将不可重现。以上面场景为例,假如Martin从加锁包里读取的文件数是7,接着,David提交了更新,这时,Martin再从加锁包里读取文件个数,则得出的结果变成了9,以前的7将不可重现。可重复读的概念和不可重复读概念相反,即如果允许可重复读,则即使David提交了更新,Martin从加锁包里读出的文件个数还是7。可重复读:可重复读的概念在上面介绍了,可重复读可能会出现幻读。至于幻读,还是可以用上面例子来描述:首先,Martin从加锁包里读出7个文

4、件,这时,David提交了更新(另一个事务),Martin又从多步提交包里读出8个文件,于是统计得出了一个错误的结果,即7+8=15。出现幻读的原因是读的结果只对Martin事务一部分有效,而不是对整个事务有效,而且通常是由于插入数据造成的。读未提交:最低的隔离界别。可能会出现幻读、脏读以及不可重复读等。在这种隔离级别下,允许一个事务读取其它事务还未提交的数据。例如:Martin可能会在David刚往加锁包中添加完文件还没向多步提交包中添加文件时,就统计了David往加锁包中添加的文件,即统计结果为2

5、+7+5=14。而此时,David事务并没提交,假如David更新成功,成功提交了事务,统计结果应该为17,或者David更新失败,事务回滚,统计结果应该为12。DB2四种隔离级别(IsolationLevels)详解维护数据库的一致性和数据完整性,同时又允许多个应用程序同时访问同一数据,这样的特性称为并发性。DB2数据库用来尝试强制实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据。DB2使用下列隔离级别来强制实施并发性:●可重复读(Re

6、peatableRead)●读稳定性(ReadStability)●游标稳定性(CursorStability)●未提交读(UncommittedRead)可重复读隔离级别可以防止所有现象,但是会大大降低并发性(可以同时访问同一资源的事务数量)。未提交读隔离级别提供了最大的并发性,但是“脏读”、“幻像读”和“不可重复读”都可能出现。默认的隔离级别是CS。10.3.1可重复读(RR—RepeatableRead)可重复读隔离级别是最严格的隔离级别。在该隔离级别下,一个事务的影响完全与其他并发事务隔离,脏

7、读、不可重复的读、幻像读现象都不会发生。当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。因此,如果在同一个事务中发出同一个SELECT语句两次或更多次,那么产生的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或回滚操作终止该事务。但是,在事务存在期间,不允许其他事务执行会影响这个事务正在访问的任何行的插入、更新或删除操作。为了确保这种行为不会发生,锁定该事务所引用的每一行——而不是仅锁定被实际检索或修改的那些行。因

8、此,如果一个事务扫描了1000行,但只检索10行,那么它所扫描的1000行(而不仅是被检索的10行)都会被锁定。那么在现实环境中可重复读隔离级别是如何工作的呢?假定如家酒店使用DB2数据库跟踪如家酒店的客房信息,包括房间预订和房价信息,还有一个基于Web的应用程序,它允许顾客按“先到先服务”的原则预订房间。如果旅馆预订应用程序是在可重复读隔离级别下运行的,当顾客扫描某个日期段内的可用房间列表时,您(旅馆经理)将无法更改那些房间在指定日期范围内的房价。同样

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。