Oracle Database :玩转Oracle学习笔记之(25):Oracle事务

oracle事务:
1、什么是事务:事务用于保证数据的一致性,他由一组相关的DML(增加,删除,修改)语句组成,改组的DML语句要么全部成功,要么全部失败;
务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。


事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit);

事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
   
a、原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
b、一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。  
c、隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。   
d、持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。



事务和锁:
当执行一个事务操作的时候,Oracle会在被作用的表上枷锁,防止其他用户更改表的结构;


提交事务:
当执行commit语句就可以提交事务,当执行了commit语句之后,会确认事务的变化,结束事务,删除包巡店,释放锁,当commit语句结束事务之后,其他的会话将可以查看到事务变化后的新数据;

回退事务:
在介绍回退事务之前,先了解一下保存点(savapoint)的概念和作用,保存点是事务中的 一点,用于取消部分事务,当事务结束时候,会自动删除该事务所定义的所有 保存点,当执行rollbock是,通过制定的包巡店可以会退到制定的这个点;当执行commit后,以前做的保存点都不存在的,因此最好保证rollback在commit之前;



事务的几个重要操作:
1、设置保存点 savepoint a;
2、取消部分事务: rollback to a;
3、取消全部事务: rollback;



在程序中使用事务:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class oracleTestOne {

    public static void main(String[] args) {
        oracleTestOne testOne = new oracleTestOne();
        testOne.oracleJdbcTest();
    }

    void oracleJdbcTest() {
        Connection connection= null;
        //加载驱动;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        try {
            //连接数据库;
             connection = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:orcl", "scott",
                    "Spongcer123");
            
            //设置连接的自动提交为假,禁止自动提交,如果不禁止的话,那么每执行一次SQL语句,就会向数据库中 提交一次;
            
            connection.setAutoCommit(false);
            //创建查询;
            Statement statement = connection.createStatement();
            //执行SQL语句;
            statement.executeUpdate("update emp set sal=sal+100 where ename='SCOTT'");
            int a = 7/0;
            statement.executeUpdate("update emp set sal=sal-100 where ename='SMITH'");
            
            //手动提交事务;
            connection.commit();
            
            //关闭语句和连接,释放资源;
            statement.close();
            connection.close();

        } catch (SQLException ex) {
            // TODO: handle exception
            //如果发生异常就回滚;
                try {
                    connection.rollback();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            
            ex.printStackTrace();
            
        }
    }
}


只读事务:set trasaction read only;
只读事务是指只允许执行查询的操作,不允许执行任何其他的dml操作,使用只读数据卡哇伊确保用户只能取得某个时间点的数据;在设置了只读事务后,尽管其他会话可能会提交新的事务,但是只读事务将不会提取最新的数据的变化,从而可以保证取得特定时间点的数据信息;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值