1相关术语


语句



含义



操作



DML语句



(Data Manipulation Language)


数据库操作语言



insert update delete select



DDL语言



(Date definition Language)


数据库定义语言



create table;create view index sequence synonvm同义词,truncate table



DCL语言



(Data control Language)


数据控制语言



commit rollback savepoint


2数据库认证


Oracle数据库管理员认证专员(OCA)



Oracle Certified Associate



Oracle数据库管理员认证专家(OCP)



Oracle Certified Professional



Oracle数据库管理员认证大师(OCM)



Oracle Certified Master


3 insert语句

A插入一个完整记录:

insert into emp values (1, 'aaa', 'clerk',7092, '17-12月-80', 8000, NULL, 20);

B插入部分记录:

insert into emp(empno,ename,deptno)values(2,'bb',20);

C插入空值(显示和隐式)

D插入日期

insert into empvalues(3,'ccc','clerk',7092,sysdate,8000,NULL,20);

E创建脚本 取地址符 & ,通过这种方式可以让用户自定义输入

SQL> insert into emp(empno,ename,deptno)

      2 values(&empno,&ename,20);

输入 empno的值: 4

输入 ename的值: 'cccc4'

原值   2: values(&empno,&ename,20)

新值   2: values(4,'cccc4',20)

 

已创建 1行。

insert into values批量插入 insert into 批量添加_闪回

F select ename,job,&tt from emp;

insert into values批量插入 insert into 批量添加_导入数据_02

4批量插入数据

A把10号部门的员工copy到另外一个表中


创建表结构



create table emp10


    as


       select * from emp where 1=2;



insert into values批量插入 insert into 批量添加_SQL_03



批量插入数据



insert into emp10


select * from emp where deptno = 10;



insert into values批量插入 insert into 批量添加_闪回_04


insert into values批量插入 insert into 批量添加_SQL_05


5 update语句,语法结构如下:


UPDATE  table


            SET   column = value [, column = value, ...]


                  [WHERE           condition];



update emp10


set deptno = 20


where empno = 7782;



insert into values批量插入 insert into 批量添加_导入数据_06


6 delete语句


语法结构:



DELETE [FROM] table


[WHERE condition];


7 delete与truncate的区别


delete(删除表的数据)和truncate表(truncate实质把表drop然后重新建表)区别:



1、delete逐条删除,truncate先摧毁在重建



2、delete语句是DML语句,truncate是DDL语言


  A DML语句可以闪回 做错的并且提交了,可以通过闪回,撤销操作


  B DDL语言不可以闪回 flashback



3、delete是逐条删除,会产生碎片,truncate不会产生碎片


  行移动功能:要开启闪回功能,必须要开启行移动功能。



4、delete不会释放空间 truncate会



5、delete可以回滚 truncate不可以



6、oracle delete快,mysql truncate快


网络上关于delete和truncate的区别的介绍:


语法:



delete from tablename;


truncate table tablename;



区别:



1、 delete from后面可以写条件,truncate不可以


2、 delete from记录是一条条删的,所删除的每条记录都会进日志,而truncate一次次删掉整个页,因此日志里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事物日志空间较少。


3、 delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。


4、 当使用行锁执行DELETE语句时,将锁定表中各行以便删除。Truncate始终锁定表和页,而不是锁定各行。


5、 如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,truncate后,种子会恢复初始。


6、 truncate不会触发delete的触发器,因此truncate操作不记录各个行删除。



总结:



1、 truncate和delete只删除数据,不删除表的结构(定义)


drop语句将删除表的结构,被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。


2、 delete语句是dml操作,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl操作,操作立即生效,原数据不放到rollback segment中,不能回滚。操作不触发trigger.


3、 delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不动,显然drop语句将表所占用的空间全部释放,truncate语句缺省情况下见空间释放到minextents个extent,除非使用reuse storage;truncate会将高水线复位(回到最开始)。


4、 速度,一般来说:drop > truncate > delete


5、 安全性:小心使用drop和truncate,尤其没有备份的时候,否则哭都来不及。


6、 使用上,想删除部分数据行用delete,注意带上where子句。回滚段要足够大。想删除表,当然用drop,想保留表而将所有数据删除。如果和事务无关,用truncate即可,如果和事务有关,或者想触发trigger,还是用delete,如果是整理表内部的碎片,可以用truncate跟上reuse stroage,在重新导入/导入数据。


8从文件中导入数据,通过命名delete和 truncate删除表数据


从文件导入数据



SQL> set timing off;


SQL> set feedback off;


SQL> drop table testdelete purge;


SQL> @c:\Sql.sql;


SQL>


SQL> set timing on; //最后删除数据表的时候,把时间打开,记录时间


SQL> delete from testdelete;


已用时间: 00: 00: 00.09



从文件导入数据:



set timing off;


@c:\Sql.sql;    


set timing off; 


select count(*) from testdelete;


set timing on; //最后删除数据表的时候,把时间打开,记录时间


truncate table testdelete;


已用时间: 00: 00: 00.51



总结:



truncate表一般比delete表的速度快,但Oracle做了优化,delete数据的时候更快些!