delete: delete from 表
drop: drop table 表 删除整个表结构包括数据 无法恢复
truncate:truncate table 表
-----------------------------------------------------------------------------------
1:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。
2: TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
3:DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
4:TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。举例:
使用identity。truncate table 表。之后。再插入的话,标识列的计数值又重1开始。
create table tcc( id int identity primary key, name varchar ) insert into tcc values('a'); insert into tcc values('b'); select *from tcc;
id | name |
1 | a |
2 | b |
使用delete删除
delete from tcc; insert into tcc values('a'); insert into tcc values('b'); select *from tcc;
结果:identity是从3开始
id | name |
3 | a |
4 | b |
使用 truncate
id | name |
1 | a |
2 | b |
5:对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。
注意:对于复制表,只能复制表结构或数据,外键约束不能复制,所以可以用truncate 删除,
举例: 熟悉的emp dept表
就可以truncate table dept1;但是不能truncate PL/SQL工具自带的dept表,
6:由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。 Oracle中不用committ,delete需要,所以truncate后不能恢复数据
TRUNCATE TABLE 不能用于参与了索引视图的表。
7:drop table 表 。删除表全部 ,包括结构数据。
create table dept1 as select *from dept where 1=1;
create table emp1 as select *from emp where 1=1;
truncate table tcc; insert into tcc values('a'); insert into tcc values('b'); select *from tcc;