https://blog.youkuaiyun.com/ws0513/article/details/49980547
1 delete
-
可用于table和view
-
delete是
DML(data maintain Language,数据维护语言),需要手动提交(commit)操作才能生效,可以通过rollback撤消操作 -
每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中,以便进行回滚(rollback)和重做操作 -
如果
有相应的 tigger,执行的时候将被触发 -
可以使用where -
delete语句
不影响自增字段的值 -
DELETE操作不会减少 表或索引 所占用的空间
2 truncate
-
只能用于table,
不能用于view,也不能用于外键(foreignkey )约束引用的表,而应使用不带 where 子句的 delete 语句 -
truncate是
DDL(data define language,数据定义语言),会隐式提交,所以不能回滚,不会触发触发器 -
删除表中的所有行,但
表结构及其列、约束、索引等保持不变,并且将重新设置高水线和所有的索引 -
truncate后,
表 和 索引 所占用的空间会恢复到初始大小 -
TRUNCATE TABLE
通过释放存储表数据所用的数据页 来删除数据,并且只在事务日志中 记录页的释放,删除操作是不能恢复的,并且在删除的过程中不会激活与表有关的删除触发器,执行速度快。
3 drop
1、drop是DLL(data define language,数据定义语言),会隐式提交,所以不能回滚,不会触发触发器。
2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。
3、DROP则删除表结构和数据,触发器,索引,依赖于该表的存储过程/函数 将被保留,但其状态会变为:invalid。
4 总结:
-
在
速度上,一般来说,drop> truncate > delete -
在使用drop和truncate时一定要注意,
虽然可以恢复,但为了减少麻烦,还是要慎重 -
如果想
保留表而将所有数据删除,如果和事务无关,用truncate即可 -
如果
和事务有关,或者想触发trigger,还是用delete -
如果是
整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
本文详细对比了SQL中delete、truncate和drop三种删除表数据的方法。分别介绍了它们的特点、适用场景及注意事项,帮助读者理解不同操作之间的区别。
4397

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



