`
雪馨25
  • 浏览: 129538 次
  • 性别: 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新手入门指导之一——数据库表空间知识.txt

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

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

    通过这些步骤,可以实现对用户会话级别的资源限制,当超过限制时,Oracle会采取相应措施如终止操作、回滚事务或锁定账户,从而保护数据库免受滥用和攻击。同时,调用级别的限制则影响单个SQL语句,不影响其他已执行...

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

    综上所述,"网吧计费系统——Oracle数据库"项目不仅涵盖了数据库设计与管理的基本原理,还涉及到系统开发、性能优化、安全性保障等多个方面,对于学习和理解企业级数据库应用有着重要的参考价值。通过深入研究这个...

    C#——数据库开发

    ### C#——数据库开发 #### 18.1 常用数据库介绍 在C#编程环境中,开发者常接触到三种主流数据库系统:Oracle数据库、Access数据库以及SQL Server数据库。每种数据库都有其独特的特性和适用场景。 ##### 18.1.1 ...

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

    - **事务控制语言 (TCL)**:用于管理数据库事务,如提交(COMMIT)、保存点(SAVEPOINT)和回滚(ROLLBACK)等。 - **数据控制语言 (DCL)**:用于管理数据库权限,如授予(GRANT)和撤销(REVOKE)权限。 #### 2. Oracle数据...

    《C++Builder5程序设计——数据库应用实务篇》程序源代码

    《C++Builder5程序设计——数据库应用实务篇》是一本专为C++Builder开发者深入学习数据库编程技术而编写的书籍。这本书的程序源代码包含了大量关于C++Builder5与数据库交互的实际示例,旨在帮助读者掌握如何利用C++...

    C++ Builder 5程序设计——数据库应用实务篇

    总的来说,《C++ Builder 5程序设计——数据库应用实务篇》是一本全面指导开发者掌握C++ Builder 5数据库编程的实用教程,不仅涵盖了数据库连接、查询和操作的基础知识,还深入到事务处理、性能优化等高级主题,对于...

    人事管理系统——数据库课程设计

    综上所述,"人事管理系统——数据库课程设计"涵盖了数据库设计的基本原理,包括表的创建、字段定义、关联关系的建立以及数据库文件的使用。通过这个项目,学生不仅能学习到数据库技术,还能理解如何将这些技术应用于...

    金仓数据库应用技术培训——数据库产品简介.pptx

    【金仓数据库应用技术培训——数据库产品简介】 金仓数据库是一款由中国电子信息产业集团有限公司研发的高性能、高可靠的数据库管理系统,其主要产品包括KingbaseES通用数据库军用版、KingbaseDBCloud云数据库以及...

    数据库事务处理基础——设计与实现

    在“数据库事务处理基础——设计与实现”这个主题中,我们将深入探讨数据库事务的各个方面,包括其定义、特性、类型以及如何在实际应用中进行设计和实现。 数据库事务是数据库操作的基本单元,它封装了一组操作,...

    Linux企业解决方案速查表——数据库产品.pdf

    《Linux企业解决方案速查表——数据库产品》是针对企业在Linux操作系统环境下选择数据库产品的重要参考文献。这份资料详尽地介绍了几款主流的、支持Linux的数据库产品,包括MySQL、PostgreSQL、DB2 UDB、Oracle 10g...

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

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

    数据库编程学习——多种数据库连接方法介绍

    数据库编程学习涵盖了许多方面,包括数据库的基本原理、不同的数据库类型,以及如何连接和操作数据库。在本文中,我们将深入探讨数据库技术的历史、数据库系统的优势、数据库管理系统(DBMS)的功能,以及桌面数据库...

    甲骨文推出Oracle Berkeley数据库4.5版——最新版可嵌入式开源数据库提高了性能、可用性和易用性.pdf

    在性能方面,Oracle Berkeley数据库4.5版增加了多版本并行控制,这允许并发事务在不影响彼此的情况下运行,从而提高了系统处理大量并发操作的能力。同时,数据库的优化使得数据读取和写入速度得到显著提升,这对于...

    全国计算机技术与专业软件技术考试——数据库工程师考试历年试题

    对于2007年的试题,如"2007sjkxtgcss.pdf",可能涉及了数据库管理系统的新特性,比如Oracle的RAC(Real Application Clusters)或者SQL Server的数据库镜像等高可用性解决方案。而"2007xsjkss.pdf"可能包含了对...

    C#版Oracle数据库通用操作类

    本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。该类提供了一系列方法,包括基础连接、执行 SQL 语句、数据集分页处理等。 #### 一、概述 `ConnForOracle` 类主要实现了对 Oracle ...

    物联网导论PPT——数据库与物联网65.pptx

    常见的关系型数据库管理系统包括Oracle、SQL Server和IBM的DB2。 然而,随着物联网的崛起,传统的关系数据库面临着新的挑战。物联网数据的特点在于其海量性、实时性、异构性和动态性。这些特性使得传统数据库在处理...

    Oracle课件-大型数据库技术

    总的来说,Oracle大型数据库技术涵盖了数据库设计、并发控制、存储优化、备份恢复、性能调优和安全管理等多个方面,这门课件将带领学习者深入理解并掌握这些关键知识点,以应对日益复杂的企业级数据管理挑战。

    Oracle学习笔记——day01

    在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...

Global site tag (gtag.js) - Google Analytics