今天温习oracle事务,记录如下:
- 事务定义
事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败。
我们知道SQL92标准定义了数据库事务的四个特点:
- 原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做
- 一致性 (Consistency) :事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的
- 隔离性 (Isolation): 多个事务并发的独立运行,而不能互相干扰,一个事务修改,新增,删除数据在根据当前事务的事务隔离级别基础上,其余事务能看到相应的结果(这里为什么这么说,下面我会给我具体的例子进行分析)
- 持久性 (Durability) : 事务被提交后,数据会被永久保存
2. 事务控制命令
- COMMIT 提交事务
- SAVEPOINT 事务保存点 (savepoint a)
- ROLLBACK(TO) 回滚[回滚到定义的保存点] rollback to a
3. 锁的概念
锁是为了保证多个并发的事务在引用同一个资源时,对资源的保护,同时也防止事物间的相互破坏。
4. Oracle中锁类型
- 共享锁(表锁)共享锁有一下几种模式
- 行共享模式 : 不运行其它用户插入,删除,更新操作,多个用户可以同时作用于该表,都能查询。语法如下:Lock table XX in share mode
- 行共享更新模式 : 允许多个用户同时锁定表中不同的行,能执行DML语句,除了那些被锁定的行。
- 排他锁(行锁):
不允许其它用户对该表插入,删除,修改操作,只能查询,同时其它用户不能修改和锁定表
- 死锁 : 所个事务对资源的相互等待,造成死锁。
5. 事务隔离级别
事务隔离级别定义了事务之间的隔离程度。SQL92标准中定义了4中隔离级别。
- 未提交读 (READ UNCOMMITTED) 幻想读、不可重复读和脏读都允许。
- 提交读 (READ COMMITTED)
允许幻想读、不可重复读,不允许脏读。
- 重复读 (REPEATABLE READ)
允许幻想读,不允许不可重复读和脏读。
- 序列化 (SERILIZABLE) 幻想读、不可重复读和脏读都不允许。
通过一些现象,可以反映出设置事务隔离级别产生的效果:
-
幻想读(幻读):
事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
- 脏读: 事务T1修改了一条数据,但是还未提交,事务T2恰好读取到了这条修改后了的数据,此时T1将事务回滚,这个时候T2读取到的数据就是脏数据,称为脏读。
- 不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
6.Oracle的事务隔离级别
ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only。
-
READ COMMITTED
-
这是ORACLE缺省的事务隔离级别。
- 事务中的每一条语句都遵从语句级的读一致性。
- 保证不会脏读;但可能出现非重复读和幻像。
-
SERIALIZABLE
-
简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。
-
仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改(也就是说其它事务在本事务开始后所做的修改,即使提交了,本事务也看不到)
-
保证不会出现非重复读和幻像。
- Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作.
-
设置隔离级别
-
设置一个事务的隔离级别
- SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- SET TRANSACTION READ ONLY;
-
设置单个会话的隔离级别
- ALTER SESSION SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- ALTER SESSION SET TRANSACTION ISOLATION SERIALIZABLE;
7.具体例子
-
-
演示2个事务,T1更新表A的数据,T2删除表2的数据
-
演示事务的隔离级别
- T1事务设置隔离级别为SERIALIZABLE,T2为默认级别
-
- 有的朋友可能会问,是不是T2未提交造成的,那么我们将T2提交后的结果如下
-
- 我们看看T3的查询结果
-
-
由上述结果我们可以知道,如果事务设定了序列化的隔离级别,那么在该事务期间,其它事务对该事物中引用的资源修改将不可见。
好了,今天的总结到此,还会有后续文章
- 大小: 4.9 KB
- 大小: 130.2 KB
- 大小: 18.7 KB
- 大小: 25.7 KB
- 大小: 19.5 KB
- 大小: 27 KB
- 大小: 19.4 KB
- 大小: 39.3 KB
- 大小: 24.6 KB
- 大小: 29.4 KB
- 大小: 31.5 KB
- 大小: 32.2 KB
分享到:
相关推荐
Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...
本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### Oracle事务 在数据库操作中,事务是一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有ACID...
Oracle 事务处理 Oracle 事务处理是指在 Oracle 数据库中对数据进行操作时,确保数据的一致性和完整性的一种机制。事务处理是 Oracle 数据库的核心功能之一,通过事务处理,数据库可以确保数据的一致性和完整性,...
java 代码写的关于Oracle的 事务处理
Oracle事务管理 Oracle事务是一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统中最重要的部分之一,它确保了数据库的一致性和可靠性。 事务的特性: * 原子...
Oracle事务管理 Oracle事务是指一组数据库命令,构成单一逻辑工作单元的操作集合。事务是访问并可能更新各种数据项的一个程序执行单元,是不可分割的工作逻辑单元。执行并发操作的最小控制单位。 事务的特性包括...
首先,要了解Oracle事务的完整流程,首先要明白客户端与服务端的连接机制。Oracle客户端与服务端的连接通过网络实现,这一过程中可以使用不同的连接类型。一种是专用服务器连接(dedicated server),另一种是共享...
总的来说,Oracle事务和EJB的结合为分布式企业级应用提供了强大的数据管理能力,使得开发者能够构建出高可用、高性能且数据一致的应用系统。理解并掌握事务管理机制,对于优化数据库操作、提升系统性能至关重要。
### Oracle事务、锁表查询及相关实用查询SQL语句 #### 一、Oracle事务管理 在Oracle数据库中,事务是作为一组逻辑操作单元处理的一系列数据库操作。这些操作要么全部成功,要么全部失败,确保了数据的一致性和完整...
Oracle 事务管理 Oracle 事务是指一组数据库命令,构成单一逻辑工作单元的操作集合,是不可分割的工作逻辑单元。事务控制是数据库管理系统的核心之一,目的是为了确保数据库操作的安全、可靠和高效。 事务的特性:...
本文将详细介绍Oracle数据库中事务的概念、操作、控制以及死锁的原理和处理方法,但不涉及具体的Java设计模型或代码样例,仅以Oracle事务和死锁为主题进行讨论。 ### 事务概念 在Oracle中,事务是确保数据库数据...
### Oracle事务的核心特性详解 #### 一、引言 在Oracle数据库系统中,事务是数据库管理系统执行过程中的最小逻辑单元,它确保了数据处理的完整性和一致性。事务管理是数据库系统的重要组成部分,对于保证数据的...
Oracle 事务是数据库管理系统中确保数据一致性的重要机制。在Oracle中,事务是由一系列SQL语句组成的逻辑工作单元,它们作为一个整体被执行,确保要么全部成功,要么全部失败,从而保证数据的完整性和一致性。 1. *...
通过深入理解Oracle事务的这些基本概念和特性,数据库管理员和开发人员能够更好地控制数据的变更,确保数据的完整性和一致性,从而提高系统的稳定性和可靠性。实践中,应根据具体的应用场景和需求选择合适的事务隔离...
本文将深入探讨Oracle事务处理的运行机制、实现方法,并通过实例解析事务处理的整个流程。 首先,事务是数据库操作的基本单位,它封装了一组逻辑相关的SQL语句,这些语句要么全部执行,要么全部回滚,以此保证数据...
Oracle 事务处理是数据库操作的核心概念,它确保了数据的完整性和一致性。事务是一组逻辑操作,这些操作被视为单个单元,必须全部成功执行或全部回滚,以防止数据不一致。这种机制对于多用户环境中的并发操作尤其...