TRANSACTION_READ_UNCOMMITTED 1

  这种隔离级别最低,脏读,不可重复读,幻读都会发生,我用的oracle,并没有支持这个级别,不作研究。

  TRANSACTION_READ_COMMITTED  2 

  This is the default transaction isolation level. Each query executed by a transaction sees only data that was committed before the query (not the transaction) began. An Oracle query never reads dirty (uncommitted) data.

  Because Oracle does not prevent other transactions from modifying the data read by a query, that data can be changed by other transactions between two executions of the query. Thus, a transaction that runs a given query twice can experience both nonrepeatable read and phantoms.

  可以避免脏读,当前connection读到的都是其他connection已经commit的数据。orcale的默认级别。

  TRANSACTION_REPEATABLE_READ 4

  这是避免不可重复读的隔离策略,oracle也不支持这个,我们可以用sql语句select..... for update 来理解,就是查询操作都要把你要查询的行加锁。这样别人就不能改了,这样也就不会发生不可重复读了。

  我做了个实验用一个connection读一个字段,然后将线程等待5秒,然后再读同样的东西,在等待5秒过程中,用另一个线程去update并提交了这个字段,结果第一个线程读取得到的两个值一个是改之前的一个是改之后的,我把conn的隔离级别设成4,就报oracle不支持的错了。所以可想而知如果oracle支持,那么这两次读取应该是一致的。

  TRANSACTION_SERIALIZABLE 8

  最高的级别,所有问题都不会发生。我用的oracle11,做实验发现开了这个隔离级别后,是能保证不发生幻读了,我用一个线程前后读两次表进行全表查询,另一个线程在中间插入一条记录,第一个线程前后两次结果都一致,然后不开这个隔离级别,后面的结果就变了,说明确实幻读是解决了。但我以为是要将表全部锁住来不让幻读发生,结果却是又能插入新的数据(之后又测试了下删除和修改操作都是可以的,不会被锁),而两次查询前后又都一致,oracle是如何实现的呢:

  Serializable transactions see only those changes that were committed at the time the transaction began, plus those changes made by the transaction itself through INSERT , UPDATE , and DELETE statements. Serializable transactions do not experience nonrepeatable reads or phantoms.

  官方的说法是只能查看到在事务开始之前所有被提交的数据,以及自身修改的数据,所有不会发生所有并发产生的读问题。要具体知道里面是怎么实现,还得深入学习oralce的运行原理,有好多知识点比如,undo,redo,sga,日志,scn,LGWR等,现在先知道是什么,以后有时间了静下来好好学习下Oracle,在弄明白How。

读一致性实现原理

  查询语句进入执行状态时,ORACLE会为它分配一个当前的SCN。该查询语句在数据缓冲区中搜索所需的数据块时,只会读取SCN小于或等于该SCN的数据块。如果所需的数据块的SCN大于该SCN,则该查询语句就会从撤销段中获得对应的数据块的原始版本,并且该版本的SCN同样需要小于或等于该SCN,这样通过对数据块SCN的比较,该查询语句就只会返回在它开始之前就语句提交的数据。保证了不会读取到未提交事务所产生的脏数据块,也不会读取到该查询语句开始执行之后才提交的数据块。

  

----------------

不知道其他数据库如何,oralce支持的这两种隔离级别都是个写锁,在update但未commit的时候,都是把你要操作的那些数据是锁了的,其他人这个时候是不能写这些数据的。也许这和隔离级别没关系了,因为隔离级别正确的理解是从自己出发,我自己能看到什么,而不是关心别人怎么看到我写的。这样想思路就不会绞了。

数据库隔离级别深入理解(ORACLE)的更多相关文章

  1. Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  2. 数据库隔离级别(mysql+Spring)与性能分析

     数据库隔离级别与Spring配置事务的联系及性能影响,以下是个人理解,如果有瑕疵请及时指正.   这里以mysql为例,先明确以下几个问题: 一.一般项目如果不自己配置事务的话,一般默认的是au ...

  3. Mysql加锁过程详解(6)-数据库隔离级别(1)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  4. springmvc 事务控制与数据库隔离级别

    springmvc 事物传播与数据库隔离控制 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html 一.Propagation ...

  5. SQL SERVER 2008 数据库隔离级别代码演示

    SQL SERVER 2008 数据库隔离级别代码演示   个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...

  6. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  7. ★ MYSQL隔离级别 通俗理解 + mysql、oracle默认事务隔离级别

    ★  脏读 : 读取了前一事务 未提交 的数据 ; 不可重复读    : 读取了前一事务     提交 的数据: ★ 幻读 与 不可重复读 common :都是读取了另一条已经提交的事务(这点与脏读不 ...

  8. Java学习笔记_ 数据库隔离级别和事务传播行为

    转自: https://blog.csdn.net/qq_38545713/article/details/79779265 一:数据库的事物隔离级别与传播行为总结:              很多人 ...

  9. mysql数据库隔离级别

    # 原创,转载请留言联系 事务的隔离级别 (由高到低)1.串行化(serializable):一个事务一个事务的执行2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交 ...

随机推荐

  1. 卷积神经网络CNNs的理解与体会

    https://blog.csdn.net/shijing_0214/article/details/53143393 孔子说过,温故而知新,时隔俩月再重看CNNs,当时不太了解的地方,又有了新的理解 ...

  2. Python 基于Python实现批量创建目录

    基于Python实现批量创建目录 by:授客QQ:1033553122 测试环境: Python版本:Python 2.7   代码实践 #!/usr/bin/env python # -*- cod ...

  3. Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题

    最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...

  4. (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)

    转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...

  5. (后端)Java新人入职——配置环境及安装开发工具(完全)

    转自csdn:执笔记忆的空白 很多新人对于进入新公司,相关工具的安装和环境变量的设定很苦恼.又苦于没有完整的配置开发环境的资料,我这里写一篇操作步骤的案例, 至少让你能把开发工具安装起来,并实用起来, ...

  6. html5手机移动端三级联动城市选择器

    //我的地址 var area1 = new LArea(); area1.init({ 'trigger': '#demo1', //触发选择控件的文本框,同时选择完毕后name属性输出到该位置 ' ...

  7. solr-query

    解释: 1.query:获取全部数据的SQL 2.deltaImportQuery:获取增量数据时使用的SQL 3.deltaQuery:获取pk的SQL 4.parentDeltaQuery:获取父 ...

  8. SSD 下的 MySQL(5.5) IO 优化

    一 目录 一 目录 二 背景 三 SSD 特性 四 基于 SSD 的数据库优化 五 A 项目 MySQL 主从关系图 六 程序切换之前调优 6.1 修改系统 IO 调度算法 6.2 修改 innodb ...

  9. cx_Oracle读取Oracle数据库中文乱码问题解决

    在使用cx_Oracle模块读取Oracle数据库中的中文记录时,返回值皆为?,后google得此佳文,遂问题得以解决,特此记之. Oracle数据库版本是10g,字符集是AL32UTF8. 编写的p ...

  10. Emmet快速编写代码

    Emmet快速编写代码 ★div → <div></div>, span → <span></span> ★CSS选择器 ​ 给标签指定id选择器 di ...