

用子查询的数据更新表或插入另一表,设置还原点,回滚与提交事务,在MyEclipse演示加入事务与未加入的区别。
一、把子查询查询出的多条数据插入到另一个表中
create table kkk(myId number(4),myName varchar2(50),myDept number(5));//创建名为kkk的表,表有myid(4位整数),myname(50个字符),mydept(5位整数)三个字段
insert into kkk(Myid,myName,myDept) select empno,ename,deptno from emp where deptno=10;//查询emp表deptno等10的记录的empno,ename,deptno三个字段分别插入kkk表的myid,myname,mydept字段
二、用子查询查询的数据更新表
希望员工scott的岗位,工资,补助与smith一样
update emp set job=(select job from emp where ename='SMITH'),sal=(select sal from emp where ename='SMITH') //设置emp表的job等smith的job,sal等于smith的sal
update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT'; //设置scott的job,sal.comm和smith一样
三、事务和锁,commit,savepoint...,rollback与rollback to...,exit,提交事务与保存点
dml操作语句,指对数据的增删改,要么全部成功,要么全部失败,dml不包括查询。锁,当一个用户操作表时,会锁定表,其它用户操作不了,后面的只能在队列里等待
savepoint a1;
delete from emp where empno=9996;
savepoint a2;
delete from emp where empno=9999;
rollback to a2;
select * from emp;
rollback a1;
select * from emp;
commit;//提交以前的事务,此操作会结束事务,删除保存点,释放锁。不论前面有多少个保存点都将不存在了
rollback to a1;
exit;也会自动提交
rollback 回滚到最前面
四、在java程序中使用事务,用MyExlipse软件演示在一个账户减10元,一个加10元,演示加入事务与未加入的区别
先右击一个工程src,加入一个class包,
部分演示代码:
ct.setAutocommit(false);//加入事务处理 ,默认执行一句就提交,有这句会把下面整体提交,有个有问题就回滚
statement sm=ct.createStatement();
sm.executeUpdate("update emp set sal=sal-100 where ename='scott'");
//从scott工资中减100,当没加入事务时处理时,就算这句后会了异常,通过查询数据库发现这句也会提交成功,加入事务后就不会成功了
int i=7/0; //让抛异常的语句,后面就不执行了
sm.executeUpdate("update emp set sal=sal+100 where ename='smith'");//给smith加100
ct.commit; //提交事务
sm.close();//关闭资源代码
ct.close();//关闭资源代码
try //因为下面事务回滚也可能抛出异常,所以加入try
ct.rollback();//如果发生异常就回滚
注:这里要注意作用域