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
本文详细介绍了SQL中的三种删除操作:DELETE、TRUNCATE 和 DROP 的用法及区别。DELETE 用于删除表中符合条件的数据行,属于DML语言,支持事务回滚。TRUNCATE 用于清空整个表的数据,属于DDL语言,操作快速且不可回滚。DROP 用于删除表结构及其依赖项。
4696

被折叠的 条评论
为什么被折叠?



