事务用于保证数据的一致性,由一组相关dml语句(数据操作语言:增删改)组成,改组dml语句要么全部成功要么全部失败。执行事务操作时会对操作的表进行加锁,防止其他用户修改表的结构。
提交事务--commit;
确认事务的变化,结束事务,删除保存点,释放锁
保存点---savepoint a1;设置保存点,(保存点的个数没有限制)
rollback to a1;取消部分事务
rollback;取消全部事务
未commit的事务才可被回滚到保存点。
设置好保留点a1后提交事务再进行回滚提示:从未创建保留点a1
java中加入事务处理:
Connection ct = null;
try{
Class.forName("
Oracle.jdbc,driver,OracleDriver");//加载驱动
ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger")//得到连接
ct.setAutoCommit(false);//加入事务处理
Statement sm = ct.createStatement();
//scott转给smith100元
sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
ct.commit();//提交事务 www.2cto.com
sm.close();
ct.close();
}catch (Excception ee){
try(
ct.rollback();//如果发生异常回滚
}catch (Excception ex){
ex.printStackTrace();
}
ee.printStackTrace();
}
只读事务:其他会话提交新事务,只读事务不会取得最新数据的变化,保证取得特定时间点的数据信息。如:订票
系统,利息统计,网上转账...
set transaction read only
利用子查询插入多条数据:insert select
SQL> create table myMember (myId number(4),myName varchar2(50),myDept number(5));
SQL> insert into myMember (myID,myName,myDept) select empno,ename,deptno from emp where deptno=10;
利用子查询更新数据:
//将scott的岗位工资和补助更新和SMITH相同
SQL> update emp set(job,sal,comm) = (select job,sal,comm from emp where ename='SMITH')where ename='SCOTT';
作者 小丑鱼0703