`

ORACLE数据库事务隔离级别 (转)

 
阅读更多
 

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。

两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。

2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。

3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。

为了处理这些问题,SQL标准定义了以下几种事务隔离级别

READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。

READ COMMITTED 允许幻想读、不可重复读,不允许脏读

REPEATABLE READ 允许幻想读,不允许不可重复读和脏读

SERIALIZABLE 幻想读、不可重复读和脏读都不允许

Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读

SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED

设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

下面是oracle 设置SERIALIZABLE隔离级别一个示例:

左面是事务T1,右面是事务T2,因为T2级别为SERIALIZABLE,所以即使事务T1在提交了数据之后,事务T2还是看不到T1提交的数据,幻想读和不可重复读都不允许了。

那如何能查看到T1新增的记录呢? 上面T1和T2是并发执行,在T1执行insert的时候事务T2已经开始了,因为T2级别是SERIALIZABLE,所以T2所查询的数据集是T2事务开始前数据库的数据。即事务T1在事务T2开始之后的insert和update操作的影响都不会影响事务T2。现在重新开启一个事务T3 就可以看到T1新增的记录了。

当下列事件发生时,事务就开始了:

1、连接到数据库,并执行第一条DML语句

2、前一个事务结束后,又输入了另一条DML语句

 

from:http://www.cnblogs.com/jackal/archive/2011/02/14/1954231.html

分享到:
评论

相关推荐

    数据库事务隔离级别

    介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响

    数据库事务和隔离级别

    数据库事务和隔离级别

    oracle 数据库隔离级别学习

    oracle 事务隔离级别 事务不同引发的状况: 脏读(Dirty reads) 一个事务读取另一个事务尚未提交的修改时,产生脏读 很多数据库允许脏读以避免排它锁的竞争。 不可重复读(Nonrepeatable reads) 同一查询在同一事务中...

    ORACLE数据库事务隔离级别介绍

    事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度

    MSSQL与Oracle数据库事务隔离级别与锁机制对比

    只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 状态。 Isolation(隔离性): 事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正 确性和完整性。同时,并行事务的修改必须与其他并行...

    四种隔离级别与锁

    数据库事务的四种隔离级别的特点描述,他们的使用热度,以及各种锁在隔离级别下的释放时机。

    数据库事务与隔离技术

    通过此文档,让你完全了解数据库事务与隔离技术,SQL SERVER,ORACLE在不同事务隔离级别的区别,以及两种数据库本身的特点

    韩顺平 玩转Oracle 10g实战教程全套PPT

    Oracle中事务处理 –事务隔离级别 oracle的事务隔离级别 ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only ◆ oracle的 read committed 说明: ①这是ORACLE缺省的...

    Oracle数据库、SQL

    17.4事务的隔离级别 35 17.5数据库开发的关键挑战 35 17.6锁的概念 36 17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子...

    通过实例分析MySQL中的四种事务隔离级别

    在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别有4个,下面话不多说了,来一起看看详细的介绍吧。 数据库事务有四种隔离级别: 未提交读(Read Uncommitted):允许脏...

    ORACLE的隔离级别

    隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    5.1.4 Oracle事务隔离级别 5.1.5锁管理器 5.2 RAC资源的协调和管理 5.2.1 Cache Fusion的结构 5.2.2 Cache Fusion工作原理 5.2.3 GES全局控制 5.3 RAC并发与一致性 5.3.1 DLM锁管理器 5.3.2多版本数据块 ...

    数据库常见面试题

    2、Mysql提供了哪几种事务隔离级别? 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义? 4、date,datetime和timestamp数据类型有什么区别? 5、union 与union all的区别? 6、简述Mysql几种Join的...

    ORACLE中如何找到未提交事务的SQL语句详解

    在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢? 关于这个问题,我们先来看看实验测试吧。实践出真知。 首先,我们在会话1(SID=63)中构造一个未提交的事务,如下所:...

    数据库系统-招标参数---模板.doc

    另一个是新事务隔离级别(快照),增强系统" " " "的并发管理 " " " "支持在同一个硬件服务器上运行多个数据库实例 " " " "支持同一个实例上运行多个数据库,同一管理控制" " " "台完成所有管理工作,工具易于理解、...

    基础篇-MySQL简介 (Java面试,MySQL高频知识点:事务特点ACID,事务隔离级别,存储引擎,数据库锁)

    MySQL有几个隔离级别(最好这个问题不要等被问,而在问上个的时候主动说这个) MySQL是怎么确保事务的正常执行的(日志,这个问得好像不多,但是可以作为一个亮点) MySQL有哪些存储引擎,各自的特点 因为这篇文章不...

    神通数据库-数据库快速入门.pdf

    锁定机制,使事务相互隔离。 记录机制,保证事务的持久性。即使服务器硬件、操作系统或数据库自身出现故障,也可以在重新启动 时使用事务日志,将所有未完成的事务自动地回滚到系统出现故障的位置。 事务管理特性,...

Global site tag (gtag.js) - Google Analytics