(1)Truncate 是DDL 语句,DELETE 是DML语句。
(2)Truncate 的速度远快于DELETE。当执行DELETE操作时所有表数据先被COPY到回滚表空间,数据量不同花费时间长短不一。而TRUNCATE 是直接删除数据,不进回滚表空间。
(3)delete 数据可以运行Rollback 进行数据回滚。而Truncate 则是永久删除,不能回滚。
(4)Truncate 操作不会触发表上的delete触发器,而delete 会正常触发。
(5)Truncate 语句不能带 where 条件,意味着只能进行全部数据删除,而DELETE可带 where 条件进行局部删除数据。
(6)Truncate 操作会重置表的高水位线(High Water Mark),而delete 不会。
(7)DELETE可以操作视图,TRUNCATE不能操作视图。
小结:
TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。如果DELETE不加WHERE子句, DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。DELETE FROM table1 WHERE 1。