隔离级别 |
脏读 |
不可重复读 |
幻像读 |
READ UNCOMMITTED |
允许 |
允许 |
允许 |
READ COMMITTED |
|
允许 |
允许 |
REPEATABLE READ |
|
|
允许 |
SERIALIZABLE |
|
|
|
READ UNCOMMITTED 提供非阻塞读 允许脏读。
READ COMMITTED 事务只能读取数据库中已经提交的数据,所以没有脏读,但可能有不可重复读和幻读(与事务早期相比,查询不光能看到其它提交事务更新的行,还能看到新插入的行),还有一点就是,如果在一条语句中查询了多行,除Oracle以外的其它数据库都可能 “退化”成像脏读一样,并且写阻塞读,产生等待,并且数据是错误的。
REPEATABLE READ(可重复读) 保证读一致(read-consistent) 在非Oracle数据库中
为达可重复读,需要阻塞一个事务,并且顺序执行两个事务,这是使用共亨锁来实现,这样,读会阻塞写,且写会阻塞读,影响并发性,而且会产生死锁。
SERIALIZABLE 就像一个用户一样地操作
上而说的都是非Oracle存在的缺点,在Oracle中有三个级别
Oracle实现原理:得用undo段实现数据多版本,来得到读一致性,并且支持非阻塞读,高并发性,鱼和熊掌兼得。
1)、READ COMMITTED 结果级别非上而提到的级别,不会脏读,不可重复读,幻读,这是Oracle默认的级别。
2)、READ ONLY(只读) 相当于无法在SQL完成任何修改的REPEATABLE READ或
SERIALIZABLE,唯一的区别是READ ONLY事务不行修改,因此没有去3)点中的ORA-08177错误,但他不能防止其它事务的修改,如果undo太小的话,有可能重用undo段,并导致ORA-15555:snaphot too old错误,所以设置足够大的undo大小。
3)、SERIALIZABLE 原本是语句级的读一致性,扩展到事务级,结果并非相对开始的那个时间点一致,而是在事务开始的那一刻就固定了,这是有代价的,只要你试图更新某一行,而这行自事务开始后已经修改,你就会得到ORA-08177 cant't serialize access for this transaction错误(同一块的所有行修改都可能导致这个错误)为避免这个错误,可以用select ... for update,实现串行访问,但这也并不意味是SERIALIZALBLE等同与串行顺序并且总能得到相同的结果。
时间 |
会话1执行 |
会话2执行 |
T1 |
alter session set isolation =_level = serializable |
|
T2 |
|
alter session set isolation =_level = serializable |
T3 |
Insert into a select count(*) from b |
|
T4 |
|
Insert into a select count(*) from b |
T5 |
commit |
|
T6 |
|
commit |
结果表a和表b都有一个为0的行
注意以sys用户或sysdba连接的用户不能有READ ONLY或SERIALIZABLE的事务。
相关推荐
### ORACLE的隔离级别 #### 一、概念理解 **隔离级别**定义了事务与事务之间的隔离程度。在多用户环境中,多个事务并发执行时,可能会出现一些问题,如更新丢失、脏读、非重复读和幻像读等。为了减少这些问题的...
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
Oracle 事务是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。事务是数据库操作的逻辑单位,由一系列数据库...实践中,应根据具体的应用场景和需求选择合适的事务隔离级别,以平衡并发性能和数据一致性。
Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...
总结来说,Oracle 数据库提供了多种事务隔离级别,以适应不同的并发需求和数据一致性保证。理解并正确选择隔离级别对于优化并发性能和维护数据完整性至关重要。开发和数据库管理员需要根据业务场景和性能需求来选择...
数据库事务和隔离级别
2. **提交读(Read Committed)**:Oracle默认的事务隔离级别,它确保一个事务不会读取到其他事务未提交的修改,从而避免了脏读。然而,由于只保证语句级别的读一致性,非重复读和幻像读仍然可能发生。 3. **重复读...
Oracle数据库的事务隔离级别是确保数据一致性的重要机制,它决定了在一个事务执行期间,与其他并行事务的交互方式。事务隔离级别主要解决并发操作时可能出现的三个问题:幻读(Phantom Read)、不可重复读(Non-...
### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...
Mysql的默认事务隔离级别是可重复读,而Oracle的默认事务隔离级别是读已提交。 事务隔离要解决的问题 -------------------- 事务隔离要解决的问题有三个:脏读、不可重复读和幻读。 * 脏读(Dirty Read):一个...
数据库事务的四种隔离级别的特点描述,他们的使用热度,以及各种锁在隔离级别下的释放时机。
Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...
数据库事务隔离级别和锁机制是确保数据库并发操作正确性和一致性的关键组成部分。在数据库系统中,尤其是大型企业级应用,多个用户可能同时访问和修改相同的数据,因此并发控制显得尤为重要。 事务的四个基本特征...
Oracle数据库还支持更复杂的事务隔离级别,如读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。不同的隔离级别可以防止脏读、不可重复读和幻读等...
### 数据库事务隔离级别与锁 #### 一、事务的基本特征 事务是数据库管理系统的核心概念之一,用于确保数据的一致性和正确性。事务通常具备以下四个特性,即ACID特性: 1. **原子性(Atomicity)**:事务被视为一...
事务隔离级别可以是Read Uncommitted、Read Committed、Repeatable Read和Serializable。不同的隔离级别可以提供不同的隔离性和并发性。 在事务处理中,需要注意事务的提交和回滚。提交是指将事务的结果保存到...
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多版本数据块 ...