1.处理对象
TRUNCATE只能对table;
DELETE可以是table和view;
TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
2.处理速度
一般而言,drop > truncate > delete
延伸知识:为什么TRUNCATE速度快?
Truncate table 表名 速度快,而且效率高,因为:
truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放
3.是否支持回滚
DELETE语句为DML(data maintain Language),这个操作会被放到 rollback segment中,所以支持回滚,若是事务提交后才生效;如果有相应的 tigger,执行的时候将被触发。
DROP、TRUNCATE是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚。
4.使用场景不同
在没有备份情况下,谨慎使用 drop 与 TRUNCATE。
要删除部分数据行采用DELETE且注意结合WHERE来约束影响范围。回滚段要足够大。
要删除表用DROP。
若想保留表而将表中数据删除,如果于事务无关,用TRUNCATE即可实现。如果和事务有关,或是想触发trigger,还是用DELETE。
5.TRUNCATE TABLE 与DROP TABLE区别:
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。
如果想保留标识计数值,请改用 DELETE。
如果要删除表定义及其数据,请使用 DROP TABLE 语句。