`
雪馨25
  • 浏览: 126481 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

oracle简单学习总结(六)——数据库事务

阅读更多

一、概念

事务是由相关操作构成的一个完整的操作单元。两次连续成功的COMMIT或ROLLBACK之间的操作,称为一个事务。在一个事务内,数据的修改一起提交或撤销,如果发生故障或系统错误,整个事务也会自动撤销。

二、理解

我们去银行转账,操作可以分为下面两个环节:
(1) 从第一个账户划出款项。
(2) 将款项存入第二个账户。

在这个过程中,两个环节是关联的。第一个账户划出款项必须保证正确的存入第二个账户,如果第二个环节没有完成,整个的过程都应该取消,否则就会发生丢失款项的问题。整个交易过程,可以看作是一个事物,成功则全部成功,失败则需要全部撤消,这样可以避免当操作的中间环节出现问题时,产生数据不一致的问题。数据库事务是一个逻辑上的划分,有的时候并不是很明显,它可以是一个操作步骤,也可以是多个操作步骤。

理解数据库事物:

对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。

三、优点

1. 把逻辑相关的操作分成了一个组。

2. 在数据永久改变前,可以预览数据变化。

3.能够保证数据的读一致性

四、应用

数据库事务处理可分为隐式和显式两种。

1、显式事务:操作通过命令实现

2、隐式事务:由系统自动完成提交或撤销(回退)工作,无需用户的干预。

隐式提交的情况包括:

1、当用户正常退出SQL*Plus或执行CREATE、DROP、GRANT、REVOKE等命令时会发生事务的自动提交。

2、还有一种情况,如果把系统的环境变量AUTOCOMMIT设置为ON( 默认状态为OFF) , 则每当执行一条INSERT 、DELETE 或UPDATE命令对数据进行修改后,就会马上自动提交。设置命令格式如下:
SET AUTOCOMMIT ON/OFF
隐式回退的情况包括:当异常结束SQL*Plus或系统故障发生时,会发生事务的自动回退。

显式事务处理的数据库事务操作语句有3条

 

语 句 描 述
COMMIT 数据库事务提交,将变化写入数据库
ROLLBACK 数据库事务回退,撤销对数据的修改
SAVEPOINT 创建保存点,用于事务的阶段回退

COMMIT操作把多个步骤对数据库的修改,一次性地永久写入数据库,代表数据库事务的成功执行。

ROLLBACK操作在发生问题时,把对数据库已经作出的修改撤消,回退到修改前的状态。在操作过程中,一旦发生问题,如果还没有提交操作,则随时可以使用ROLLBACK来撤消前面的操作。

SAVEPOINT则用于在事务中间建立一些保存点

ROLLBACK可以使操作回退到这些点上边,而不必撤销全部的操作。一旦COMMIT完成,就不能用ROLLBACK来取消已经提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必须重新执行相关操作语句。

五、开始

一般情况下,开始一个会话(即连接数据库),执行第一条SQL语句将开始一个新的事务,或执行COMMIT提交或ROLLBACK撤销事务,也标志新的事务的开始。另外,执行DDL(如CREATE)或DCL命令也将自动提交前一个事务而开始一个新的事务。

示例:

第一步:查询所有表数据

第二步:插入一条数据(id=14那条)

第三步:插入保存点,检查点的名称为PA:

 

第四步:插入另一条数据(id=15那条)

第五步:再插入保存点,检查点的名称为PA1:

第六步:展示数据

insert into AZJuserInfor values (abc.nextval,'张四',to_date('2012-02-13','yyyy:MM:dd'),0,1); 
SAVEPOINT pa;
insert into AZJuserInfor values (abc.nextval,'张四儿',to_date('2012-02-13','yyyy:MM:dd'),10,1); 
select t.*, t.rowid from azjuserinfor t order by id;
SAVEPOINT pa1;
select t.*, t.rowid from azjuserinfor t order by id;

 


第七步:删除id=13的数据,展示数据

第八步:回退到保存点PA 1

 

第八步:回退到保存点PA

此时不可再回退至pa1

第九步:提交

提交完成

实际执行效果是,插入了一条数据,并未进行后续的插入及删除操作

一个具体的java实现例子:

学习网址:http://zmx.iteye.com/blog/371005

代码如下:

 

public class SavePointTest {
    public static void main(String[] args) throws SQLException {
       test();
    }
    static void test() throws SQLException {
       Connection conn = null;
       Statement st = null;
       ResultSet rs = null;
       Savepoint sp = null;
       try {
           conn = JdbcUtils.getConnection();
           conn.setAutoCommit(false);   //设置禁止自动提交
           st = conn.createStatement();
           String sql = "update user set money=money-10 where id=1";
           st.executeUpdate(sql);
           sp = conn.setSavepoint();//插入保存点
           sql = "update user set money=money-10 where id=3";
           st.executeUpdate(sql);
           sql = "select money from user where id=2";
           rs = st.executeQuery(sql);
           float money = 0.0f;
           if (rs.next()) {
              money = rs.getFloat("money");
           }
           if (money > 300)
              throw new RuntimeException("已经超过最大值!");
           sql = "update user set money=money+10 where id=2";
           st.executeUpdate(sql);
           conn.commit();
       } catch (RuntimeException e) {
           if (conn != null && sp != null) {
              conn.rollback(sp);//回滚到那个事务点上去
              conn.commit();
           }
           throw e;
       } catch (SQLException e) {
           if (conn != null)
              conn.rollback();
           throw e;
       } finally {
           JdbcUtils.free(rs, st, conn);
       }
    }
}

 

分享到:
评论

相关推荐

    Oracle数据库——数据库安全性管理.pdf

    Oracle数据库 数据库——数据库安全性管理 数据库安全性管理 ⼀、涉及内容 1.验证系统权限管理。 2.验证⾓⾊管理。 3.验证概要⽂件管理。 ⼆、具体操作 (⼀) 1.根据以下要求进⾏系统权限的授予与回收操作。 (1)...

    Oracle精髓(第4版)

    如何安装、运行、管理、监控、联网和调整Oracle——包括企业管理器(EM)以及Oracle自我调整和管理能力——以及如何使用Oracle安全、审计和依从性(本版中新增的——章内容)。多用户并发、数据仓库、分布式数据库、...

    21天学通Oracle

    8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 ...

    oracle 事务

    EJB——事务,会话等详细资料,吐血整理,强力推荐,数据库提升的快速门道

    Oracle SQL高级编程

    在研究一些被其他专门讨论Oracle SQL语言的参考书直接忽略的问题时,这种对Oracle数据库的长期钻研无疑是一个巨大的优势。  ——亚马逊读者评论 目录 第1章 SQL核心 1 1.1 SQL语言 1 1.2 数据库的接口 2 1.3 SQL*...

    oracle实验报告

    Oracle数据库自带的几个触发器(最简单触发器格式)示例如下: -- create or replace trigger MDSYS.sdo_drop_user after drop on DATABASE declare stmt varchar2(200); BEGIN if dictionary_obj_type = 'USER...

    对数据库的认识.doc

    这或许就是我选择这门课——数据库的原因吧! 本学期开学,我自己通过看书、上网了解到了数据库的许多更专业的知识。我大致了 解到了数据库具体是用来做什么,需要处理那些问题的了。 首先,数据库是数据管理的最新...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    主流数据库分类.doc

    常见主流数据库分类 1、IBM 的DB2 作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    Oracle数据库中的基本建库操作详解

    域名,可以只使用 库名——SID区分大小写——……——数据路径选择,模版默认的是$ORACLE_BASE/oradata/dababase——备份数据的路径——内存分配(SGA专用内存,事务处理为主;PGA系统内存,数据为主)|Sizing中的块...

    Oracle 11g 从入门到精通——第十三章(视频教程)

    共计2个视频 1 事务 2 锁

    Oracle DBA 参考手册

    2.2.1. ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: 19 2.2.2. 每天的工作 20 2.2.3. 每周的工作 21 2.2.4. 每月的工作 22 DBA例行工作 22 2.3. 开发 DBA 工作 24 3. 操作系统和服务器硬件 25 ...

    数据库管理系统DBMS在企业管理中的应用.doc

    现阶段企业所使用的数据库管理系统的种类 MS SQL SYBASE DB2 ORACLE MySQL ACCESS VF 选择原则 选择数据库管理系统时应从以下几个方面予以考虑: (1) 构造数据库的难易程度。 需要分析数据库管理系统有没有范式的...

    支持多数据库的ORM框架ef-orm.zip

    例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...

    2020 DTC 数据技术嘉年华演讲PPT汇总.zip

    2020 DTC 数据技术嘉年华演讲PPT汇总(共43篇),供大家学习参考。 数据库智能运维(含手机端远程运维)建设实践 伴鱼数据库架构选型及平台化建设的思考与实践 腾讯云数据库打造国产化生态,助力政企数字化转型 ...

Global site tag (gtag.js) - Google Analytics