我们知道,delete 和 truncate 都可以对一张表执行清空操作,比如 delete from table1,或者 truncate table table1。但他们之间存在着本质上的区别。具体区别如下。


delete 和 truncate 区别

  1. delete 逐条删除表“内容”,truncate 先摧毁表再重建。 (由于delete使用频繁,Oracle对delete优化后delete快于truncate)
  2. delete 是DML语句,truncate 是DDL语句。 DML语句可以闪回(flashback),DDL语句不可以闪回。(闪回: 做错了一个操作并且commit了,对应的撤销行为。了解)
  3. 由于delete是逐条操作数据,所以delete会产生碎片,truncate不会产生碎片。 同样是由于Oracle对delete进行了优化,让delete不产生碎片。
  4. delete不会释放空间,truncate 会释放空间 用delete删除一张10M的表,空间不会释放。而truncate会。所以当确定表不再使用,应truncate
  5. delete可以回滚rollback, truncate不可以回滚