`
hys1982
  • 浏览: 12719 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

关于oralce的事务隔离级别

阅读更多

首先,先了解一下事务隔离级别的相关概念:

 

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

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

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

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

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

 

oracle只有两种事务隔离级别,而SQL标准定义了四种事务隔离级别

以下是sql标准定义的:

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

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

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

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

 

oracle:

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

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

 

得出一个结论,oracle是不允许脏读的。通过命令的方式你也可以知道oracle事务隔离级别

set transaction isolation level read uncommitted

ORA-02179: valid options: ISOLATION LEVEL { SERIALIZABLE | READ COMMITTED }

提示uncommitted无效,而有效的很明显只有两种事务隔离级别.默认的是read committed级别。

 

另外还有一点需要注意的是,在oracle的一个事务中,如果你update了一条数据,在没有提交的情况下,然后再select这条数据,你会查询出刚刚update的值。这个时候如果有并发的一个事务,那么他取到的还是update之前的值,因为之前的那个事务并没有提交。

 

我觉得一般来说read committed就已经可以了,至于出现幻想读和不可重复读,对于一般应用而言,也没有什么。而如果用serializable串行的话,对并发的影响会更大,性能也会相对降低。

 

 

 

 

分享到:
评论

相关推荐

    ORACLE的隔离级别

    ### ORACLE的隔离级别 #### 一、概念理解 **隔离级别**定义了事务与事务之间的隔离程度。在多用户环境中,多个事务并发执行时,可能会出现一些问题,如更新丢失、脏读、非重复读和幻像读等。为了减少这些问题的...

    数据库事务隔离级别

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

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

    oracle 数据库隔离级别学习

    总结来说,Oracle 数据库提供了多种事务隔离级别,以适应不同的并发需求和数据一致性保证。理解并正确选择隔离级别对于优化并发性能和维护数据完整性至关重要。开发和数据库管理员需要根据业务场景和性能需求来选择...

    数据库事务和隔离级别

    数据库事务和隔离级别

    oracle隔离级别

    2. **提交读(Read Committed)**:Oracle默认的事务隔离级别,它确保一个事务不会读取到其他事务未提交的修改,从而避免了脏读。然而,由于只保证语句级别的读一致性,非重复读和幻像读仍然可能发生。 3. **重复读...

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

    Oracle数据库的事务隔离级别是确保数据一致性的重要机制,它决定了在一个事务执行期间,与其他并行事务的交互方式。事务隔离级别主要解决并发操作时可能出现的三个问题:幻读(Phantom Read)、不可重复读(Non-...

    数据库事务隔离级别.docx

    ### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...

    Spring中的事务隔离级别的介绍

    Mysql的默认事务隔离级别是可重复读,而Oracle的默认事务隔离级别是读已提交。 事务隔离要解决的问题 -------------------- 事务隔离要解决的问题有三个:脏读、不可重复读和幻读。 * 脏读(Dirty Read):一个...

    四种隔离级别与锁

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

    Oracle事务与锁定

    Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...

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

    数据库事务隔离级别和锁机制是确保数据库并发操作正确性和一致性的关键组成部分。在数据库系统中,尤其是大型企业级应用,多个用户可能同时访问和修改相同的数据,因此并发控制显得尤为重要。 事务的四个基本特征...

    oracle 在java中的事务处理和异常回滚。

    Oracle数据库还支持更复杂的事务隔离级别,如读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。不同的隔离级别可以防止脏读、不可重复读和幻读等...

    oracle事务.ppt

    事务隔离级别可以是Read Uncommitted、Read Committed、Repeatable Read和Serializable。不同的隔离级别可以提供不同的隔离性和并发性。 在事务处理中,需要注意事务的提交和回滚。提交是指将事务的结果保存到...

    Oracle事务概念及基础知识.pdf

    Oracle 事务是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。事务是数据库操作的逻辑单位,由一系列数据库...实践中,应根据具体的应用场景和需求选择合适的事务隔离级别,以平衡并发性能和数据一致性。

    oracle 事务实验

    - 设置事务隔离级别为可重复读: ```sql SQL> set transaction isolation level repeatable read; ``` - 设置事务隔离级别为串行化: ```sql SQL> set transaction isolation level serializable; ``` 在...

    数据库_事务隔离级别与锁.docx

    ### 数据库事务隔离级别与锁 #### 一、事务的基本特征 事务是数据库管理系统的核心概念之一,用于确保数据的一致性和正确性。事务通常具备以下四个特性,即ACID特性: 1. **原子性(Atomicity)**:事务被视为一...

Global site tag (gtag.js) - Google Analytics