ORACLE数据库事务隔离级别

转载 2016年06月01日 22:07:45

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

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

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语句


 

隔离级别

脏读

不可重复读

幻影读

序列化

N

N

N

可重复读

N

N

Y

读已提交

N

Y

Y

读未提交

Y

Y

Y

 

Oracle明确支持ANSI/ISO SQL92中定义的serializable和read committed两种事务隔离级别。

 

同时,Oracle还提供了自己独有的事务隔离级别:read only。

 

所以,可以说Oracle共支持3种事务隔离级别:

 

1.       serializable

2.       read committed

3.       read only

 

Oracle默认的隔离级别是read committed。


Oracle事务隔离级别

脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。 不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,在此期间,由于其...
  • leozhou13
  • leozhou13
  • 2016年01月03日 00:11
  • 3217

数据库事务四种隔离级别

定义: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read com...
  • tolcf
  • tolcf
  • 2015年10月20日 22:40
  • 18903

深究Oracle的隔离级别

http://www.cnblogs.com/jackal/archive/2011/02/14/1954231.html 多用户环境下的数据并发访问及数据一致性简介  在只有单一用户的数...
  • zdy0_2004
  • zdy0_2004
  • 2016年07月07日 01:28
  • 2009

数据库事务隔离级别和锁实现机制

一 数据库事务处理中出现的数据不一致的情况  在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下: 1、丢失更新   如果两个事务...
  • flyingfalcon
  • flyingfalcon
  • 2016年11月05日 15:29
  • 3939

oracle事务的隔离级别和锁

1. 事务的ACID特性: (1) 原子性 Atomicity: 事务所包含的数据库操作要么都做,要么都不做 (2) 一致性 Consistency: 数据库中只包含执行成功的结果,每个用户看到的数据...
  • zdp072
  • zdp072
  • 2016年04月08日 23:29
  • 3459

数据库事务隔离级别和锁的实现方式

当数据库中多个事务(Transaction)处理同一数据时,就会出现并发的问题,也就是需要解决数据库隔离性的问题(isolation)。     数据库的事务操作主要会碰到以下几类问题:     ...
  • yangtianyu1218
  • yangtianyu1218
  • 2016年05月31日 10:20
  • 1307

数据库事务四种隔离级别

定义: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read c...
  • zhangnana200
  • zhangnana200
  • 2016年08月10日 18:09
  • 1021

Spring事务管理与数据库隔离级别的关系(Spring+mysql)

之前写过一篇文章《数据库隔离级别(mysql+Spring)与性能分析 》,里面很多问题写的不是很专业,也不是很有逻辑性,现在重新整理一下,希望对大家有帮助。 这部分通过两天时间反复的做实验...
  • hongshan50
  • hongshan50
  • 2014年03月20日 15:36
  • 10568

事务的四大特性和隔离级别

事务,其定义是应用程序中一系列不可分割的操作,就是一组可以完成某个业务的代码集合,在关系数据库中,事务可以是一条SQL语句,或者一组SQL语句,亦或整个程序。...
  • u012012621
  • u012012621
  • 2016年03月03日 12:26
  • 1848

数据库事务与隔离级别

1.数据库事务的概念: •事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败...
  • jialinqiang
  • jialinqiang
  • 2013年03月28日 16:48
  • 14770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE数据库事务隔离级别
举报原因:
原因补充:

(最多只允许输入30个字)