Oracle学习笔记(十二)——oracle中事务处理

一、事务处理
1、事务:用于保证数据的一致性,由一组相关的dml(数据操作语言;增、删、改,不包括查询)语句组成。该组的dml语句要么全部成功,要么全部失败。
     如:网上转账就是典型的要用事务来处理,用以保证数据的一致性。

2、事务和锁:当执行事务操作时(dml语句)oracle会在被作用的表上加锁,防止其他用户修改表的结构。

3、提交事务:执行commit语句可以提交事务。当执行了commit语句之后,会确认事务的变化、结束事务、删除保存点、释放锁。当使用commit语句结束事务之后,其它会话将可以查看到事务变化后的新数据。

4、保存点:事务中的一点,用于取消部分事务。当结束事务时,会自动删除该事务定义的所有保存点。

5、回退事务:当执行rooback时,通过指定保存点可以回退到指定的点。

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



7、只读事务:只允许执行查询的操作,不允许执行任何其它dml操作的事务。使用只读事务可以确保用户只能取得某时间点的数据。
  • 加入机票代售点每天18点开始统计今天的销售情况,这是可以使用只读事务。在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。
  • 设置只读事务:set transaction read only

二、在java程序中使用事务
思路:若所有操作完成,则整体提交;否则,回滚。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

//事务案例
public class TestTrans {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection ct = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "***");

			// 加入事务处理
			ct.setAutoCommit(false);

			Statement sm = ct.createStatement();

			// 从scott的sal中减去100
			sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");

			// 异常
			int i = 7 / 0;

			// 给smith的sal加上100
			sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");

			// 提交事务
			ct.commit();

			sm.close();
			ct.close();

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值