十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

truncate/delete/drop之间的区别

上一篇 / 下一篇  2011-08-14 14:41:01 / 个人分类:Oracle

文章来源
  • 文章来源:【转】
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。   DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 
TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。
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   只删除数据不删除表的结构(定义)    51Testing软件测试网W2]Y!a;cg,KU'h
          drop   语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为   invalid   状态。  51Testing软件测试网W5l6T1@5M)d
   
.Js5d2p0O O$Jy0  2.   delete   语句是数据库操作语言(dml),这个操作会放到   rollback   segement   中,事务提交之后才生效;如果有相应的   trigger,执行的时候将被触发。  
_N@4gi0        truncate、drop   是数据库定义语言(ddl),操作立即生效,原数据不放到   rollback   segment   中,不能回滚,操作不触发   trigger。  
.l q1C7y0X"yc K p1f5u$r0   
U De2C1V2c0  3.delete   语句不影响表所占用的   extent,高水线(high   watermark)保持原位置不动    51Testing软件测试网%j9{7KPO-_
      显然   drop   语句将表所占用的空间全部释放。  
TkwVJ0      truncate   语句缺省情况下见空间释放到   minextents个   extent,除非使用reuse   storage;truncate   会将高水线复位(回到最开始)。  
f-r \\O k!@ez nA0   51Testing软件测试网$l\O#\Z
  4.速度,一般来说:   drop>   truncate   >   delete    51Testing软件测试网%GL M;e;s`;ZaLJ
   
i/PGI,ic*j0  5.安全性:小心使用   drop   和   truncate,尤其没有备份的时候.否则哭都来不及    51Testing软件测试网:J,hu:Q#s A\
  使用上,想删除部分数据行用   delete,注意带上where子句.   回滚段要足够大.    51Testing软件测试网)y\%~ L iR
  想删除表,当然用   drop    
Q b/tkFc0  想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。  
o\ LH cN*?z PvH0  如果是整理表内部的碎片,可以用truncate跟上reuse   stroage,再重新导入/插入数据。

e `B6be+d0

 51Testing软件测试网@{8k f cm

TRUNCATE和DELETE有以下几点区别  1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。  2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。  3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。  4、TRUNCATE不能触发任何DELETE触发器。  5、不能授予任何人清空他人的表的权限。  6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。  7、不能清空父表。 TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE 在默认是 DROP STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊情况下使用 REUSE ST
  
  DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
  TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

TAG: truncate

 

评分:0

我来说两句

Open Toolbar