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行。

F select ename,job,&tt from emp;

4批量插入数据
A把10号部门的员工copy到另外一个表中
创建表结构
|
create table emp10
as
select * from emp where 1=2;
|

|
批量插入数据
|
insert into emp10
select * from emp where deptno = 10;
|


|
5 update语句,语法结构如下:
UPDATE table
SET column = value [, column = value, ...]
[WHERE
condition];
|
update emp10
set deptno = 20
where empno = 7782;
|

|
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数据的时候更快些!
|