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