您的位置:首页 > 运维架构

truncate、delete与drop的区别

2016-06-26 14:43 381 查看
truncate、delete与drop的区别

相同点:
         1.truncate和不带where子句的delete,以及drop都会删除表内的数据。
         2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
 
       1.truncate和delete只是删除数据不删除表的结构。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid。 (总之一句话,truncate与delete都是删除全部的数据,但是表还存在,但是drop是全部删除,表不存在了) 
 
     2.就删除的速度来说:drop > truncate >delete     删除的时候truncate比delete使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。    
 
  3.在安全的角度来讲:谨慎使用drop和truncate,尤其是没有备份的情况下,不让你哭都来不及了。谨慎。
使用上,想删除部分数据行用
delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

truncate、delete与drop的区别

相同点:
         1.truncate和不带where子句的delete,以及drop都会删除表内的数据。
         2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
 
       1.truncate和delete只是删除数据不删除表的结构。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid。 (总之一句话,truncate与delete都是删除全部的数据,但是表还存在,但是drop是全部删除,表不存在了) 
 
     2.就删除的速度来说:drop > truncate >delete     删除的时候truncate比delete使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。    
 
  3.在安全的角度来讲:谨慎使用drop和truncate,尤其是没有备份的情况下,不让你哭都来不及了。谨慎。
使用上,想删除部分数据行用
delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: