Oracle数据库之数据处理

Oracle数据库总结:

Oracle数据库之集合运算
Oracle数据库之数据处理
Oracle数据库之建表和管理表
Oracle数据库之对象视图、索引、序列、同义词

SQL> SQL的类型

SQL> 1. DML(Data Manipulation Language 数据操作语言):insert update delete select
SQL> 2. DDL(Data Definition Language 数据定义语言): create/drop/alter/truncate table
SQL> create/drop view,sequence,index,synonym(同义词)
SQL> 3. DCL(Data Control Langauge 数据控制语言): grant(授权) revoke(撤销权限)
SQL>

SQL> --插入
SQL> insert into emp(empno,ename,sal,deptno)
2 values(1001,‘Tom’,3000,10);

SQL> --地址符 &
SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1002
输入 ename 的值: ‘Mary’
输入 sal 的值: 3000
输入 deptno 的值: 20
原值 1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值 1: insert into emp(empno,ename,sal,deptno) values(1002,‘Mary’,3000,20)

SQL> /
输入 empno 的值: 1003
输入 ename 的值: ‘Mike’
输入 sal 的值: 2000
输入 deptno 的值: 10
原值 1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值 1: insert into emp(empno,ename,sal,deptno) values(1003,‘Mike’,2000,10)

\

SQL> select empno,ename,&t
2 from emp;
输入 t 的值: sal
原值 1: select empno,ename,&t
新值 1: select empno,ename,sal

 EMPNO ENAME             SAL                                                

  7369 SMITH             800                                                
  7499 ALLEN            1600                                                
  7521 WARD             1250                                                
  7566 JONES            2975                                                
  7654 MARTIN           1250                                                
  7698 BLAKE            2850                                                
  7782 CLARK            2450                                                
  7788 SCOTT            3000                                                
  7839 KING             5000                                                
  7844 TURNER           1500                                                
  7876 ADAMS            1100                                                

 EMPNO ENAME             SAL                                                

  7900 JAMES             950                                                
  7902 FORD             3000                                                
  7934 MILLER           1300                                                
  1001 Tom              3000                                                
  1002 Mary             3000                                                
  1003 Mike             2000                                                

SQL> /
输入 t 的值: job
原值 1: select empno,ename,&t
新值 1: select empno,ename,job

  EMPNO ENAME      JOB                                                       
---------- ---------- ---------                                                 
      7369 SMITH      CLERK                                                     
      7499 ALLEN      SALESMAN                                                  
      7521 WARD       SALESMAN                                                  
      7566 JONES      MANAGER                                                   
      7654 MARTIN     SALESMAN                                                  
      7698 BLAKE      MANAGER                                                   
      7782 CLARK      MANAGER                                                   
      7788 SCOTT      ANALYST                                                   
      7839 KING       PRESIDENT                                                 
      7844 TURNER     SALESMAN                                                  
      7876 ADAMS      CLERK                                                     

     EMPNO ENAME      JOB                                                       
---------- ---------- ---------                                                 
      7900 JAMES      CLERK                                                     
      7902 FORD       ANALYST                                                   
      7934 MILLER     CLERK                                                     
      1001 Tom                                                                  
      1002 Mary                                                                 
      1003 Mike                                                                 

SQL> select * from &t;
输入 t 的值: dept
原值 1: select * from &t
新值 1: select * from dept

  DEPTNO DNAME          LOC                                                   
---------- -------------- -------------                                         
        10 ACCOUNTING     NEW YORK                                              
        20 RESEARCH       DALLAS                                                
        30 SALES          CHICAGO                                               
        40 OPERATIONS     BOSTON                                                

SQL> --批处理
SQL> create table emp10 as select * from emp where 1=2;

表已创建。

SQL> select * from emp10;

SQL> desc emp10

 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> --一次性将emp所有10号部门的员工插入到emp10中
SQL> insert into emp10
2 select * from emp where deptno=10;

已创建 3 行。

SQL> select * from emp10;

  EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7782 CLARK      MANAGER         7839 09-6月 -81           2450            
        10                                                                      
                                                                                
      7839 KING       PRESIDENT            17-11月-81           5000            
        10                                                                      
                                                                                
      7934 MILLER     CLERK           7782 23-1月 -82           1300            
        10                                                                      
                                                                                

SQL> 海量插入数据:
SQL> 1. 数据泵
SQL> 2. SQL*Loader
SQL> 3. 外部表

delete和truncate的区别:

SQL> 1. delete逐条删除,truncate先摧毁表 再重建
SQL> 2. **** delete是DML(可以回滚) truncate是DDL(不可以回滚)
SQL> 3. delete会产生碎片 truncate不会
SQL> 4. delete不会释放空间 truncate会
SQL> 5. delete可以闪回(flashback) truncate不可以

SQL> select count(*) from testdelete;

COUNT(*)                                                                      
----------                                                                      
      5000       

测试delete和truncate的效率

SQL> set timing on
SQL> delete from testdelete;
已用时间: 00: 00: 00.08

SQL> set timing off

SQL> select count(*) from testdelete;

  COUNT(*)                                                                      
----------                                                                      
      5000        

SQL> set timing on
SQL> truncate table testdelete;
已用时间: 00: 00: 04.52

SQL> set timing off

SQL> Oracle中事务的标志

SQL> 1. 起始标志: 事务中第一条DML语句
SQL> 2. 结束标志:提交 显式 commit
SQL> 隐式 正常退出exit,DDL,DCL
SQL> 回滚 显式 rollback
SQL> 隐式 非正常退出,掉电,宕机
SQL>

SQL> create table sihaitest
2 (tid number, tname varchar2(20));

表已创建。

SQL> insert into sihaitestvalues(1,‘Tom’);

已创建 1 行。

SQL> insert into sihaitestvalues(2,‘Mary’);

已创建 1 行。

SQL> --定义保存点
SQL> savepoint a;

保存点已创建。

SQL> select * from sihaitest;

     TID TNAME                                                                
---------- --------------------                                                 
         1 Tom                                                                  
         2 Mary             

已选择 2 行。

SQL> insert into sihaitestvalues(3,‘sihai’);

已创建 1 行。

SQL> select * from sihaitest;

       TID TNAME                                                                
---------- --------------------                                                 
         1 Tom                                                                  
         2 Mary                                                                 
         3 sihai                                                                 

已选择 3 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from sihaitest;

    TID TNAME                                                                
---------- --------------------                                                 
         1 Tom                                                                  
         2 Mary                                                                 

SQL> commit;

提交完成。

//oracle中有三种隔离级别。
//将事务设置为只读级别时,只能读取。

SQL> set transaction read only;

事务处理集。

SQL> select * from sihaitest;

       TID TNAME                                                                
---------- --------------------                                                 
         1 Tom                                                                  
         2 Mary                                                                 

已选择 2 行。

SQL> insert into sihaitestvalues(3,‘sihai’);
insert into sihaitestvalues(3,‘sihai’)
*
第 1 行出现错误:
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-java-maker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值