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,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1002
输入 ename 的值: ‘Mary’
输入 sal 的值: 3000
输入 deptno 的值: 20
原值 1: insert into emp(empno,&deptno)
新值 1: insert into emp(empno,deptno) values(1002,’Mary’,20)

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

\

sql> select empno,&t
2 from emp;
输入 t 的值: sal
原值 1: select empno,&t
新值 1: select empno,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,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 事务处理中执行插入/删除/更新操作

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...