Oracle DML
地址符 &
:在所有的DML语句中都可以使用,其是预编译一条语句,之后给地址符处传入参数,可以一直执行该语句.
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)
select empno,ename,sal,&t from emp; 输入 t 的值: job 原值 1: select empno,ename,sal,&t 新值 1: select empno,ename,sal,job
数据处理:
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(撤销权限)
grant create view to scott
insert:
插入 insert
insert into emp(empno,ename,sal,deptno) values(1001,'Tom',3000,10);
批处理
创建一张和emp相同的表
table emp10 as select * from emp where 1=2;
一次性将emp中,所有10号部门的员工插入到emp10中(拷贝)
insert into emp10 select * from emp where deptno=10;
(海量拷贝数据
1. 数据泵(datapump) ---> plsql
2. SQL*Loader
3. (数据仓库)外部表
4. 可传输的表空间)
update:
update emp set enamel='Tomas' where empno = 2; update emp set enamel='Tomas'; (update中也可以使用子查询语句)
delete:
delete from emp where empno = 1; delete emp ;(删除所有) (delete中也可以使用子查询语句)
delete和truncate的区别:
1. delete逐条删除;truncate先摧毁表,再重建
2.(根本)delete是DML,truncate是DDL
(可以回滚) (不可以回滚)
3. delete不会释放空间 truncate会
4. delete可以闪回 truncate不可以
(flashback)
5. delete会产生碎片;truncate不会
整理碎片: alter table emp move;(或者导入和到处 exp/expdp imp/impdp )
与MYSQL不同,ORACLE中delete效率更高.(undo数据(还原数据))