oracle--处理数据

处理数据

SQL 的类型

1.DML(data manipulation Language 数据操作语言): 
insert  update delete select

2.DDL(Data Definition Language 数据定义语言): 
create table,alter table,drop table,truncate table
create/drop view,sequence(序列),index,synonym(同义词)

3.DCL(Data Control Language 数据控制语言): 
grant(授权) revoke(撤销权限)

插入 insert:

插入空值:

隐式方式:在列名表中省略该列的值
insert into departments (department_id
                         department_name)
values      (30,'Purchasing');

显式方式:在values子句中指定空值
insert into departments
values      (100,'Finance',null,null);

插入指定的值:

SQL> insert into emp(empno,ename,sal,deptno) values(1001,'Tom',3000,10);

已创建 1 行。

SQL> -- PreparedStatement pst = "insert into emp(empno,ename,sal,deptno) values(?,?,?,?)";
SQL> --地址符 &
&相当于?

例:

SQL> insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值:  1002
输入 ename 的值:  'Mary'
输入 sal 的值:  2000
输入 deptno 的值:  30
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1002,'Mary',2000,30)

已创建 1 行。

SQL> /
输入 empno 的值:  1003
输入 ename 的值:  'Mike'
输入 sal 的值:  5000
输入 deptno 的值:  20
原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值    1: insert into emp(empno,ename,sal,deptno) values(1003,'Mike',5000,20)

已创建 1 行。

&可以应用于多处:

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

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

批处理:

SQL> create table emp10 as select * from emp where 1=2;

表已创建。

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

海量拷贝数据:

1.数据泵(datapump) ---> plsql
2.SQL*Loader
3.(数据仓库)外部表
4.可传输的表空间

更新 update:

语法:

update table
set column=value[,column=value,...]
[where condition];

可以一次更新多条数据

使用where子句指定需要更新的数据:

update employees
set department id=70
where employee_id=113;

如果省略where子句,则表中的所有数据都将被更新。

update copy_emp
set department_id=110;

在update语句中使用子查询

更新114号员工的工作和工资使其与205号员工相同

update employees
set    job_id=(select job_id
               from employees
               where employee_id=205),
       salary=(select salary
               from employees
               where employee id=205)
where employee_id=114;

使更新基于另一个表中的数据:

update copy_emp
set    department_id=(select department_id
                      from employees
                      where employee_id=100)
where job_id        =(select job_id
                      from employees
                      where employee_id=200);

删除 delete:

delete [from] table 
[where condition];

使用where子句指定删除的记录:

delete from departments
where department_name='Finance';

如果省略where子句,则标准功能的全部数据将被删除。

delete from copy_emp;

在delete中使用子查询,使删除基于另一个表中的数据。

delete from employees
where department_id=
                    (select department_id
                     from departments
                     where department_name like'%public%');

delete和truncate

区别:

1.delete逐条删除;truncate先摧毁表,再重建
2.delete是DML(可以回滚),truncate是DDL(不可以回滚)(最根本的区别)
3.delete不会释放空间 truncate会
4.delete可以闪回  truncate不可以
  (flashback)通过闪回 可以撤销一个已经提交了的操作
5.delete会产生碎片;truncate不会

碎片:

oracle--处理数据_第1张图片
碎片.PNG

效率:

比较删除5000条数据所需时间:delete更快

SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;

  COUNT(*)                                                                      
----------                                                                      
      5000                                                                      
SQL> set timing on
SQL> delete from testdelete;
已用时间:  00: 00: 00.06
SQL> set timing off
SQL> drop table testdelete purge;
SQL> @d:\temp\testdelete.sql
SQL> select count(*) from testdelete;

  COUNT(*)                                                                      
----------                                                                      
      5000                                                                      
SQL> set timing on
SQL> truncate table testdelete;
已用时间:  00: 00: 00.15

undo数据(还原数据)

事务

事务的标志:

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

commit和rollback语句的优点:

1.确保数据完整新
2.数据改变被提交之前预览
3.将逻辑上相关的操作分组

控制事务:

oracle--处理数据_第2张图片
控制事务.PNG

回滚到保存点:

使用savepoint语句在当前事务中创建保存点。
使用rollback to savepoint语句回滚到创建的保存点。

SQL> create table testsavepoint
  2  (tid number, tname varchar2(20));
SQL> set feedback on
SQL> insert into testsavepoint values(1,'Tom');

已创建 1 行。

SQL> insert into testsavepoint values(2,'Mary');

已创建 1 行。

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

保存点已创建。

SQL> select * from testsavepoint;

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

已选择 2 行。

SQL> insert into testsavepoint values(3,'Maake');

已创建 1 行。

SQL> select * from testsavepoint;

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

已选择 3 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from testsavepoint;

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

已选择 2 行。

oracle中事务的隔离级别:
1.read commited(默认)
2.serializable
3.read only(oracle独有的)

SQL> set transaction read only;

事务处理集。

SQL> select * from testsavepoint;

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

已选择 2 行。

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

你可能感兴趣的:(oracle--处理数据)