delete和truncate区别

 相同之处:truncate在功能上与不带WHERE子句的delete 语句相同:二者均删除表中的全部行。小心使用truncate,删除后就没有了

1、delete : 删除"表格记录"会把操作记录在日志中,可以通过事务回滚来恢复删除的数据。

   truncate :删除"表格记录"不可恢复 。

 

2、delete :每次删除一行,并在事务日志中为所删除的每行记录一项。

    truncate  :过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

  所以truncate 比delete速度快

3、 delete:删除内容,不删除定义,释放空间
  truncate :删除内容,不删除定义,不释放空间。

 

4、delete:语句不影响表所占用的extent, 高水线(high w2atermark)保持原位置不动 
    truncate: 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse  storage;   truncate会将高水线复位(回到最开始).

 

想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.

想删除表,当然用drop

想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.

posted @ 2017-03-28 21:15  阡尘小陌  阅读(716)  评论(0编辑  收藏  举报