1、truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚
2、truncate只能作用于表;delete,drop可作用于表、视图等
3、truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等
4、truncate会重置表的自增值;delete不会
5、truncate不会激活与表有关的删除触发器;delete可以
6、truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉
使用场景及注意事项:
表数据完全不需要时可以用truncate。如果想删除部分数据用delete,注意带上where子句;如果想删除表,当然用drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate然后再重新插入数据。