oracle事务隔离级别_笔记1:READ UNCOMMITTED
READ UNCOMMITTED
READ UNCOMMITTED隔离级别允许脏读。Oracle没有利用脏读,甚至不允许脏读。READ UNCOMMITTED隔离级别的根本目标是提供一个基于标准的定义以支持非阻塞读。Oracle会默认地提供非阻塞读。在数据库中很难阻塞一个SELECT查询。每个查询都以一种读一致的方式执行,而不论是SELECT、INSERT、UPDATE、MERGE,还是DELETE。这里把UPDATE语句称为查询可能很可笑, 不过,它确实是一个查询。UPDATE语句有两个部分:一个是WHERE子句定义的读部分,另一个是SET子句定义的写部分。UPDATE语句会对数据库进行读写,就像所有DML语句一样。对此只有一个例外:使用VALUES子句的单行INSERT是一个特例,因为这种语句没有读部分,而只有写部分。
如果我们执行的查询要访问某一块,其中包含表最后已锁定的行,则会注意到,这一行中的数据在开始执行之后有所改变。为了提供一个一致的答案,Oracle在这个时刻会创建该块的一个副本,其中包含查询开始时行的“本来面目”。这样一来,Oracle就有效地绕过了已修改的数据,它没有读修改后的值,而是从undo段重新建立原数据。因此可以返回一致而且正确的答案,而无需等待事务提交。
这里的关键是,脏读不是一个特性,而是一个缺点。Oracle中根本不需要脏读。Oracle完全可以得到脏读的所有好处(即无阻塞),而不会带来任何不正确的结果。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5218.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
