DELETE
delete from 表名 //删除整张表
delete from 表名 where 条件 //删除表中符合条件的数据
-
属于DML语言,每次删除一行,都在事务日志中为所删除的每行记录一项。
-
产生rollback,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发,如果删除大数据量的表速度会很慢
TRUNCATE
truncate table 表名
- 只能操作表,将表中数据全部删除,在功能上和不带where子句的delete语句相同
- truncate是DDL语言, 操作立即生效,自动提交,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
- 删除内容、释放空间但不删除表的结构
DROP
drop table 表名
- drop语句将删除表的结构,以及被依赖的约束(constrain),触发器(trigger),索引(index)
- 除内容和定义,释放空间
区别
-
删表和索引所占空间:
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小;
DELETE操作不会减少表或索引所占用的空间;
DROP语句将表所占用的空间全释放掉 -
执行速度:drop > truncate > delete
-
如果有identity产生的自增id列,delete后仍然从上次的数开始增加,即种子不变;使用truncate删除之后,种子会恢复到初始值。
-
delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
-
执行速度: drop > truncate > delete