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. IntelliJ IDEA汉化步骤以及乱码解决

    1.首先下载intellij idea 2017 汉化补丁 附上资源 链接: https://pan.baidu.com/s/1cHC76m 密码: q23m 2.解压该款汉化补丁到本地(我的资源不需 ...

  2. HDU1559

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. jQ效果:jQuery时间轴插件jQuery Timelinr

    前言 这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚动.支持键盘方向键.经过扩展后可以支持鼠标滚轮事件. ...

  4. 【读书笔记】iOS-成为一名开发者

    iOS开发者计划是按年付费的,在过期前60天可以开始续费.如果你不续费的话,你将无法发布应用.另外苹果会吊销你的开发者证书和发布证书.最后,苹果将你在iTunes App Store上的所有应用下架. ...

  5. Sql Server 判断字符串是否可以转数字

    主要是在sql server的内置系统函数ISNUMERIC的基础上,将例外的“+”.“-”.“$”等也进行判断. CREATE FUNCTION [dbo].[fn_IsNumberic]( @st ...

  6. Mac上用spotlight搜索输入几个字母后闪退

    最近使用电脑时遇到的问题: 使用spotlight进行搜索时,只要输入字母超过一定个数(在我的Mac上是3个),spotlight就闪退了. 谷歌搜索得到大部分解决方案是在系统自带词典的偏好设置里取消 ...

  7. dell r420 H310/H810阵列配置教程及常见问题

    进入H310/H810阵列卡BIOS界面 阵列卡管理快捷键 如何创建RAID0和RAID1和RAID5 阵列修复篇 Foreign(外来)状态的硬盘应如何处理 1.进入H310/H810阵列卡BIOS ...

  8. C# show和showdialog区别

    简单地说他们的区别就是show弹出来的窗体和父窗体(上一个窗体的简称)是属于同一等级的,这两个窗体可以同时存在而且可以随意切换,但是showdialog弹出来的窗体就不能这样,他永远是被置顶的,如果不 ...

  9. 【学习笔记】python 进阶特性

    __slots__魔法 在Python中,每个类都有实例属性.默认情况下Python用一个字典来保存一个对象的实例属性.这非常有用,因为它允许我们在运行时去设置任意的新属性. 然而,对于有着已知属性的 ...

  10. React学习笔记_01

    使用Facebook的create-react-app快速构建React开发环境 前言: create-react-app:来自Facebook官方的零配置命令行工具 create-react-app ...