zoukankan      html  css  js  c++  java
  • dml数据操作和tcl事务管理

    --dml 数据操作和tcl事务操作
        --一、insert
            insert into emp(empno, ename, job, sal) values(1001,'rose', 'CLERK',  1500);
            --使用子查询插入多条数据
            create table emp_20(
                empid number(4) primary key,
                name varchar(10),
                job varchar(9)
            );
            insert into emp_20 (empid, name, job) select empno, ename, job from emp where deptno=20;
            --多表insert语句 查询语句只执行一次,然后把满足条件的分别插入到表中
            --通过子句创建表,因为1=0==>false 所以里面没有数据
            create table clerk as select * from emp where 1=0;
            create table salesman as select * from emp where 1=0;
            create table manager as select * from emp where 1=0;
            create table emp10 as select * from emp where 1=0;
            create table others as select * from emp where 1=0;
    
            --使用all执行多表插入 相当于没有break的switch语句,满足条件的就插入到表中
            insert all 
            when job=upper('clerk') then into clerk
            when job=upper('salesman') then into salesman
            when job=upper('manager') then into manager
            when deptno='10' then into emp10 
            else into others 
            select * from emp;
            --清除表数据
            truncate table clerk;
            truncate table salesman;
            truncate table manager;
            truncate table emp10;
            truncate table others;
    
            -- 使用first执行多表插入,相当于带了break的switch语句,如果满足了一个条件,然后就退出判断
            insert first 
            when job='CLERK'  then into clerk
            when job='SALESMAN' then into salesman
            when job='MANAGER' then into manager
            when deptno='10' then into emp10
            else into others
            select * from emp;
        --update
            update emp set sal=3500, job=lower(job) where ename ='SCOTT';
            --使用带子查询的update
            update clerk set (mgr,sal) = 
            (select mgr,sal from clerk where ename='JAMES') 
            where ename='rose';
        --delete
            delete from clerk where ename ='rose';
            delete from clerk where mgr=(select empno from emp where ename='SCOTT');
    
        --meger 数据备份 这里的update和insert和前面的语法有点不同
            create table emp_bak as select * from emp;
    
            update emp set sal=1500 where ename='SCOTT';
            insert into emp (empno, ename, job, sal) values(1002,'YLW','CLERK', 2500);
            commit;
            --使用on制定目标表和源表之间的关系
            merge into emp_bak D 
            using emp S 
            on (D.empno = S.empNo)
            when matched then update set D.sal=S.sal
            when not matched then 
            insert (D.empno, D.ename, D.job, D.sal)  
            values(S.empno, S.ename, S.job, S.sal);
        --事务控制
            --每次连接数据库,都会打开一个session,
            --每次执行的dml操作都是放入缓存中的,直到用户提交,别的session才看得到修改的数据
            -- commit rollback
    
            --如果大型事务在尾部出错,全部回滚开销太大,可以设置savepoint
            --savepoint 在事务中定义一些回退的点
            insert into emp(empno,ename) values(1111,'SHAGOU');
            savepoint a;
            insert into emp(empno,ename) values(1112,'SHAGOU');
            savepoint b;
            insert into emp(empno,ename) values(1113,'SHAGOU');
            savepoint c;
            insert into emp(empno,ename) values(1114,'SHAGOU');
    
            select empno, ename from emp where empno in(1111,1112,1113,1114);
            rollback to c;
            select empno, ename from emp where empno in(1111,1112,1113,1114);
            rollback to a ;
            select empno, ename from emp where empno in(1111,1112,1113,1114);
    
            --只读事务
            --开启后,相当于对当前数据库进行一次快照,之后修改的数据,在此事务中无法获得
            set transaction read only;
            select sal form emp where ename ='SCOTT';
    
            --顺序事务
            --可以执行dml的只读事务
            set transaction isolation level serializable;
  • 相关阅读:
    C# 从类库中获取资源图片,把图片资源保存到类库中
    C# Bitmap/png转成jpg格式,压缩图片
    C# 窗体间传值(使用委托与自定义事件)
    C# Image与Base64编码互转函数
    简单Tomcat HTTP RPC框架
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    Java序列化机制和原理
    攻破JAVA NIO技术壁垒
    代理模式(Proxy)
    Java序列化与反序列化
  • 原文地址:https://www.cnblogs.com/ylw666/p/6854944.html
Copyright © 2011-2022 走看看