`
冯瑞芳
  • 浏览: 28797 次
  • 性别: Icon_minigender_2
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

oracle总结之七———事务

阅读更多
一、事务概念:
概念:在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么完全成功执行,完成整个工作单元操作,要么一点也不执行。
  主要特性:确保数据库的完整性。
二、事务的ACID特性
  对一组SQL语句操作构成事务,数据库操作系统必须确保这些操作的原子性,一致性,隔离性,持久性.
原子性(Atomicity)
    事务的原子性是指事务中包含的所有操作要么全做,要么不做,也就是说所有的活动在数据库中要么全部反映,要么全部不反映,以保证数据库的一致性。
一致性(Consistency)
    事务的一致性是指数据库在事务操作前和事务处理后,其中数据必须满足业务的规则约束。
隔离性(Isolation)
   隔离性是指数据库允许多个并发的事务同时对其中的数据进行读写或修改的能力,隔离性可以防止多个事务的并发执行时,由于它们的操作命令交叉执行而导致数据的不一致性。
持久性(durability)
    事务的持久性是指在事务处理结束后,它对数据的修改应该是永久的。即便是系统在遇到故障的情况下也不会丢失,这是数据的重要性决定的。
三、事务的控制语句
   在oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的,也就是说在oracle中,用户不可以显示使用命令来开始一个事务.oracle任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务的隐式开始。但是当用户想要终止一个事务处理时,必须显示使用commit和rollback语句结束。
  根据事务ACID属性,oracle提供了如下的事务控制语句:
   Set transaction 设置事物属性
   Set constrains  设置事物的约束模式
   约束模式是指:在事务中修改数据时,数据库中的约束立即应用于数据,还是将约束推迟到当前事务结束后应用。
   Savepoint 在事务中建立一个存储的点.当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点.然后从该存储点重新执行。
   Release  savepoint  删除存储点
   Rollback 回滚事务 取消对数据库所作的任何操作
   Commit 提交事务 对数据库的操作做持久的保存。
  四、设置事物的属性:
  set transaction语句可用来设置事物的各种属性。该语句必须放在事务处理的第一个语句.
  也就是说,必须在任何insert、update 、delete语句以及其他的事务处理。
  Set transaction的语句可以让用户对事务的以下属性进行设置
指定事务的隔离层
规定回滚事务所使用的存储空间
命名事务
备注:在使用set transaction语句设置属性时,对于规定回滚事务所使用的存储空间的设置很少使用.对于命名事务也非常简单,只有在分布式事务处理中才会体现出命名事务的用途.
注意:set transaction只对当前事务有效,事务终止,事务当前的设置将会失效。
数据异常
事务的隔离性定义了一个事务与其它事务的隔离程度.为了更好的理解隔离层,首先讨论一下并发事务对同一个数据库进行访问可能发生的情况.在并发事务中总体来说会发生如下3种情况
错读 |脏读
非重复读取|不可重复读
假读|幻读
    错读|脏读:当一个事务修改数据时,另一事务读取了该数据,但是第一事务由于某种原因取消对数据修改,使数据返回了原状态,这是第二个事务读取的数据与数据库中数据部一致.这就叫错读。
   非重复读取:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。
   假读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。
    事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。
选择隔离层
   针对3中读取的数据时产生的不一致现象,在ANSI SQL标准92中定义了4个事务的隔离级别.如下图所示:
隔离层 错读|脏读 非重复读取|不可重复读 假读|幻读
READ UNCOMMITTED(非提交读) 是 是 是
READ COMMITTED(提交读) 否 是 是
Repeatable READ(可重复读) 否 否 是
Serializable(串行读) 否 否 否

Oracle支持上述四种隔离层中的两种:read committed 和serializable。除此之外oracle中还定义read only 和 read write隔离层。
Read committed 这是oracle默认的隔离层。
Serializable:设置事物的隔离层位它时,事务与事务之间完全隔开,事务以串行的方式执行,这并不是说一个事务必须结束才能启动另外一个事务,而是说这些事务的执行的结果于一次执行的事务的结果一致。
Read only和 read write 当使用read only时,事务中不能有任何修改数据库中数据的操作语句,这包括 insert、update、delete、create语句。Read only是serializable的一个子集,区别是read only 只读,而serialzable可以执行DML操作。Read write它是默认设置,该选项表示在事务中可以有访问语句、修改语句.但不经常使用.
建立set transaction的语句
列举如下:
  Set transaction read only
  Set transaction read write
  Set transaction isolation level read committed
  Set transaction isolation level serializable
注意:这些语句是互斥的.即不能够同时设置两个或者两个以上的选项。
结束事务:
什么情况下代表事务的结束呢?  
Commit 提交事务
rollback 回滚事务 
//只读的案例
SQL> set transaction read only;

Transaction set

SQL> select * from users where username='mj';

USERNAME      PASSWORD      NAME             ADDRESS             ZIP
-------------------- -------------------- -------------------- -------------------- -------
mj                  redarmy          陈红军                                

SQL> update users set password='123' where username='mj';

update users set password='123' where username='mj'

ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作

//脏读的案例
SQL> set transaction isolation level read committed;

Transaction set

SQL> select * from users where username='mj';

USERNAME      PASSWORD      NAME             ADDRESS             ZIP
-------------------- -------------------- -------------------- -------------------- -------
mj                  redarmy          陈红军                                

SQL> update users set password='123' where username='mj';

1 row updated

SQL> select * from users where username='mj';

USERNAME      PASSWORD      NAME             ADDRESS             ZIP
-------------------- -------------------- -------------------- -------------------- -------
mj                  123                 陈红军                                

SQL> rollback;
数据库:数据库的完整性,参照的完整性,用户自定义的完整性
分享到:
评论

相关推荐

    Oracle应用项目——事务实例.pdf

    Oracle数据库中的事务是数据库操作的核心概念,它是保证数据一致性、完整性和可恢复性的关键机制。在Oracle系统中,事务由一系列SQL语句组成,这些语句作为一个逻辑单元执行,要么全部成功,要么全部失败,这一特性...

    Oracle经典教程2——SQL数据库操作和查询

    ### Oracle经典教程2——SQL数据库操作和查询 #### 1. SQL简介 SQL,即结构化查询语言(Structured Query Language),是一种专为管理和操作关系型数据库设计的标准编程语言。通过SQL,用户能够有效地进行数据存取...

    .net连接oracle的简单实例——学生、教师、课程管理系统。

    总结来说,.NET连接Oracle数据库并实现学生、教师、课程管理系统的实例涉及到数据库连接、数据操作、事务处理、用户界面设计等多个环节,而选课管理是核心功能之一。通过学习和实践这些知识点,开发者可以构建出高效...

    Oracle数据库应用开发——数据操作与PLSQL程序设计.docx

    表空间决定了数据库的逻辑大小,由所有表空间的大小之和构成。系统表空间包含了数据库的核心系统信息,如数据字典,而非系统表空间包括撤销表空间(存储事务撤销数据)、临时表空间(存储排序和汇总过程的临时数据)...

    数据库-oracle12C新特性——之RMAN恢复表--嘉为科技[定义].pdf

    在进行恢复之前,可能需要模拟数据丢失的情况,例如,向表中添加新的数据,然后提交事务,再删除表并设置PURGE选项以彻底删除表。这样就创建了一个恢复的时间点。 然后,我们可以使用RMAN的`RECOVER TABLE`命令来...

    Oracle学习笔记——day01

    Oracle数据库是世界上最流行的数据库管理系统之一,广泛用于企业级的数据存储和管理。在Oracle学习的第一天,我们主要关注了SQL语句,这是与Oracle交互的基础。SQL主要包括三种类型的语言:DML(数据操作语言)、DDL...

    oracle新手入门指导之一——数据库表空间知识.txt

    ### Oracle新手入门指导之一——数据库表空间知识 #### 数据库表空间基础知识 在Oracle数据库管理中,表空间(Tablespace)是逻辑存储结构中的一个重要概念。表空间由一个或多个数据文件组成,用来存储数据库对象...

    Oracle缓存连接——Timesten体系结构 .docx

    Oracle缓存连接——Timesten体系结构是一种优化数据库性能的技术,它通过在内存中缓存Oracle数据库的部分或全部数据来加速查询和事务处理。Timesten是Oracle公司提供的一款高性能的内存数据库,专为实时应用设计,能...

    Oracle数据库应用开发——表空间与数据库模式对象的设计实验报告x_数据库对象包括哪些

    非系统表空间包括撤销表空间(存储事务回滚信息)、临时表空间(用于临时数据存储,如排序和聚合)以及用户表空间(存储用户数据)。 实验涉及以下具体操作: 1. 创建表空间:通过`CREATE TABLESPACE`语句,例如...

    网吧计费系统————Oracle数据库

    【网吧计费系统——Oracle数据库】是一个针对网络咖啡厅(网吧)收费管理的软件系统,其核心是利用Oracle数据库来存储、管理和处理各种营业数据。Oracle数据库是全球领先的数据库管理系统,以其高性能、高可用性和...

    Oracle学习笔记——day04

    在Oracle学习笔记的第四天,我们探讨了数据库管理和操作的一些核心概念,主要集中在DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)以及事务管理。以下是对这些内容的详细阐述: 首先,我们看到了...

    Oracle DBA的后悔药——Logminer技术简介.pdf

    Oracle DBA的后悔药——Logminer技术是一种强大的数据库恢复和审计工具,主要应用于Oracle数据库系统。Logminer允许DBA(数据库管理员)分析数据库的重做日志,从中获取历史操作的详细信息,包括哪些用户执行了什么...

    jdbc——内嵌事务

    jdbc——内嵌事务 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> ...

    Oracle9i讲义——东油内部教材

    Oracle9i的深入学习涉及到诸多方面,如表和索引的创建与管理、视图和存储过程的使用、事务控制、备份与恢复策略、性能调优等。这些内容将帮助用户全面理解和掌握Oracle数据库的使用,无论是进行数据管理还是开发基于...

    Oracle全面业务数据整合之道——消除企业信息孤岛

    ### Oracle全面业务数据整合之道——消除企业信息孤岛 #### 企业信息化面临的问题与关注点 随着信息技术的快速发展,企业面临着越来越复杂的信息管理和处理需求。信息孤岛问题成为了企业信息化进程中的一大挑战。...

    IBM-ETP-Oracle05第5章 事务和备份恢复管理

    本章“IBM-ETP-Oracle05第5章 事务和备份恢复管理”着重探讨了数据库的核心概念——事务处理以及如何通过有效的备份和恢复策略确保数据的安全性与完整性。 事务是数据库操作的基本单元,它包含了对数据库的一系列...

    从实践中学习Oracle SQL(下)

    本文详细介绍了 Oracle SQL 中的一些高级概念和技术,包括子查询、分组、连接、数据操纵语言 (DML)、事务处理、视图、索引优化以及 PL/SQL 和数据库安全等。通过这些实践案例的学习,相信读者已经掌握了更多实用的...

    oracle培训教材——备份与恢复以及常用命令

    Oracle数据库的备份与恢复是确保数据安全性和可用性的重要环节,尤其在企业级应用中,这一环节至关重要。本文将深入探讨Oracle数据库的备份策略、常用命令以及实际操作案例。 首先,Oracle数据库支持多种备份方式,...

    JDBC总结——事务

    在Oracle中,事务默认需要手动开启和提交。 2. **控制事务的API**: - `Connection.setAutoCommit(false)`:关闭自动提交,开启手动事务控制。 - `Connection.commit()`:提交当前事务。 - `Connection.rollback...

Global site tag (gtag.js) - Google Analytics