Oracle学习笔记(十二)——oracle中事务处理
2016-04-12 21:11
441 查看
一、事务处理
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程序中使用事务
思路:若所有操作完成,则整体提交;否则,回滚。
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(); } } }
相关文章推荐
- Oracle学习笔记(十一)——在Oracle中操作数据
- Oracle学习笔记(十)——分页显示简单示例
- Oracle常见故障解析(1):表名加引号,调试参数加引号等
- Java中使用ibatis调用Oracle存储过程和函数
- Oracle定时任务
- Oracle学习笔记(九)——eclipse中tomcat的部署
- oracle数据的导入与导出
- PreparedStatement 的 execute方法和executeUpdate方法区别
- Oracle学习笔记(八)——java操作Oracle
- ORACLE高效SQL积累
- oracle_10g em登录提示:java.lang.Exception Exception in sending Request null
- centos7 安装oracle jdk 与openjdk 实现切换
- Oracle 删除重复数据只留一条
- 连接Oracle时报错ORA-12541: TNS: 无监听程序
- oracle备份数据库
- expect交互式脚本
- Oracle内存结构
- CentOS7下Oracle11gR2监听启动错误解决
- Oracle server和client安装配置
- oracle 的rownum