我们知道,delete 和 truncate 都可以对一张表执行清空操作,比如 delete from table1,或者 truncate table table1。但他们之间存在着本质上的区别。具体区别如下。
delete 和 truncate 区别
- delete 逐条删除表“内容”,truncate 先摧毁表再重建。 (由于delete使用频繁,Oracle对delete优化后delete快于truncate)
- delete 是DML语句,truncate 是DDL语句。 DML语句可以闪回(flashback),DDL语句不可以闪回。(闪回: 做错了一个操作并且commit了,对应的撤销行为。了解)
- 由于delete是逐条操作数据,所以delete会产生碎片,truncate不会产生碎片。 同样是由于Oracle对delete进行了优化,让delete不产生碎片。
- delete不会释放空间,truncate 会释放空间 用delete删除一张10M的表,空间不会释放。而truncate会。所以当确定表不再使用,应truncate
- delete可以回滚rollback, truncate不可以回滚