`
mamaoyuan625
  • 浏览: 173445 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

truncate和delete,drop的区别

阅读更多

 

 

    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 不能用于参与了索引视图的表。

 

7drop  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; 

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics