条件删除
DELETE是可以带WHERE的,所以支持条件删除;而TRUNCATE只能删除整个表。
事务回滚
由于DELETE是数据操作语言(DML - Data Manipulation Language),操作时原数据会被放到 rollback segment中,可以被回滚;而TRUNCATE是数据定义语言(DDL - Data Definition Language),操作时不会进行存储,不能进行回滚。
清理效率
delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构。
触发器
truncate 不能触发任何Delete触发器;而delete可以触发delete触发器。
增长列
如果删除带自增长列的表,delete删除后,重新插入数据,记录从断点处开始,truncate删除后,重新插入数据,记录从1开始。
高水位重置
随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),DELETE操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用DELETE,就算将表中的数据减少了很多,在查询时还是很和DELETE操作前速度一样。
而TRUNCATE操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。
详细参考:https://www.cnblogs.com/vegetableDD/p/11726513.html