drop、delete、truncate区别

特性

1、truncate是一个能够快速清空资料表内所有资料的SQL语法,并且能针对具有自动递增值字段重置归零,重新计算的作用。truncate table用于删除表中的所有行,而不是记录单个行删除操作。

2、比delete速度快,且使用的系统和事务日志资源少。delete每删除一行,会在事务日志中记录下这一步操作。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

3、因为truncate table不记录在日志中,所以它不能激活触发器。

4、如果有rollback语句,delete操作将被撤销,但truncate不会撤销。

区别

1、drop语句将删除表的结构、被依赖的约束、触发器、索引;依赖于该表的存储过程/函数将保留,但是变为invalid状态。
2、delete语句是DML语言,需要事务提交后生效;如果有相应的触发器,执行的时候将被触发。truncate 、drop是DDL语言,操作后即生效,元数据不会放到rollback,不能回滚,操作不会触发trigger。
3、delete语句不影响表所占用的extent、高水线(high watermark)保持原位置不动。drop语句将表所占用的空间全部释放。truncate语句默认情况下将空间释放到minextents的extent,并将高水线复位。
4、效率方面:drop > truncate > delete
5、delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交