今天温习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.具体例子
-
- 准备SQL
-
- create table A(
- id int,
- name varchar2(50),
- primary key(id)
- );
- 演示一个T1插入,T2读取数据
- T1提交事务后,T2可以看到数据
-
- 我们看到了事务隔离级别的效果,那么T1,T2事务执行时,oracle怎么设置这两个事务的锁的呢?我们来看一下这个操作
-
- 当T1提交后,T2修改表A成功
-
-
演示2个事务,T1更新表A的数据,T2删除表2的数据
- 下面将T1提交,T2得到执行
-
- T1提交后的情况
-
-
演示事务的隔离级别
- T1事务设置隔离级别为SERIALIZABLE,T2为默认级别
-
- 有的朋友可能会问,是不是T2未提交造成的,那么我们将T2提交后的结果如下
-
- 我们看看T3的查询结果
-
-
由上述结果我们可以知道,如果事务设定了序列化的隔离级别,那么在该事务期间,其它事务对该事物中引用的资源修改将不可见。
好了,今天的总结到此,还会有后续文章
相关推荐
Oracle支持四种事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。每种级别都对应不同的并发控制策略,以防止脏读、不可重复读和幻...
它可以处理并发事务,并提供多种事务隔离级别。 4. **安全性**:Oracle提供了用户权限和角色管理,可以控制对数据库对象的访问。还有审计功能,可以追踪数据库活动,用于合规性和安全监控。 5. **备份与恢复**:...
Oracle体系结构(DBA)章节会介绍数据库管理员需要了解的内容,比如如何管理和维护Oracle数据库实例以及存储结构,包括内存结构和后台进程等。体系结构部分还会涉及Oracle数据库的文件类型,例如数据文件、控制文件和...
3. **事务管理**:讲解了Oracle数据库的事务特性,包括ACID属性(原子性、一致性、隔离性和持久性),以及如何在JSP中控制事务。 4. **存储过程和函数**:如何在Oracle中创建和调用存储过程及函数,以及在JSP中如何...
综上所述,"魔乐科技李兴华老师Oracle讲解"的课程内容涵盖了Oracle数据库的基础知识、SQL操作、数据库设计、事务管理、备份恢复、安全性以及高可用性等方面,对于想要深入理解和掌握Oracle数据库的人来说是一份非常...
7. **事务处理**:讲解事务的概念,事务的ACID属性(原子性、一致性、隔离性和持久性),以及提交、回滚和保存点操作。 8. **备份与恢复**:Oracle提供了多种备份策略,如完整备份、增量备份和逻辑备份。恢复技术...
1. **Oracle数据库基础**:Oracle数据库基于SQL语言,支持ACID(原子性、一致性、隔离性、持久性)特性,提供高可用性、高性能和可扩展性的解决方案。教程可能涵盖数据库的概念、数据模型、关系数据库理论以及Oracle...
- **事务隔离级别**:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE等隔离级别的特点与应用。 #### 第二十三章 用户管理 - **用户账号管理**:用户账号的创建、授权、锁定等操作。 - **角色...
- **并发控制**:掌握Oracle的锁定机制和事务隔离级别,确保数据的一致性和完整性。 - **性能调优**:通过对SQL查询、索引设计等方面的优化,提升应用的整体性能。 - **数据库独立性**:构建易于迁移的应用程序,...
这部分内容探讨了事务的基本概念、ACID属性(原子性、一致性、隔离性、持久性)、事务管理机制等内容,为理解并发控制和事务隔离级别奠定了基础。 #### 第二十三章 用户管理 这部分内容介绍了Oracle数据库中的用户...
Oracle 11g R2提供了多种事务隔离级别,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),以适应不同的应用场景。不同隔离级别控制了事务能看到...
11. 触发器、事务和用户管理:触发器用于自动执行特定操作,事务用于管理操作的原子性、一致性、隔离性和持久性,用户管理则涉及到数据库的用户和权限设置。 12. 备份恢复、SQLLoader、数据库设计工具和其他数据库...
- **并发控制**:介绍了事务隔离级别的概念,以及不同的隔离级别如何影响并发处理。 - **事务隔离级别**: - READ UNCOMMITTED:最低的隔离级别,允许读取未提交的数据。 - READ COMMITTED:默认的隔离级别,只能...
- **事务隔离级别**:解释不同的事务隔离级别(如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),并讨论它们对并发访问的影响。 - **读只事务**:探讨如何利用读只事务来减少数据库上的锁竞争...
- 事务隔离级别和死锁处理。 第6章和第7章可能涉及了更高级的主题,如安全性、备份与恢复、性能优化等,但具体内容没有给出。 总的来说,Oracle 10g Concepts文档为用户提供了全面了解Oracle数据库系统的基础,...
同时,也会讲解事务处理和回滚,理解事务的ACID属性(原子性、一致性、隔离性和持久性)是确保数据完整性的关键。 查询优化是Oracle数据库的重要部分,《Oracle九阴真经》将讲解如何编写高效的SQL查询,利用索引、...
7. **并发控制与事务管理**:Oracle使用多版本并发控制(MVCC)来处理并发事务,资料会介绍事务的概念、隔离级别以及死锁的预防和解决。 8. **数据库集群与高可用性**:Oracle Real Application Clusters(RAC)...
7. **并发控制**:介绍了Oracle的锁定机制和多版本并发控制(MVCC),如读已提交和可重复读的隔离级别。 8. **备份与恢复**:涵盖了数据库备份的各种策略,如完整备份、增量备份,以及如何使用RMAN(恢复管理器)...