DROP:
DLL:data definition language-数据定义语言
操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的存储过程/函数将保留,但是变为invalid状态. drop语句将表所占用的空间全部释放 .
TRUNCATE:
DLL:data definition language-数据定义语言
操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,只在事务日志中记录页的释放。 truncate 语句缺省情况下表空间释放到 minextents个 extent,除非使用reuse storage;
【SQL|DROP,TRUNCATE,DELETE三者的区别!!!(面试的时候问到频率比较高的)】DELETE:
DML:Data Manipulation Language-数据操作语言
操作会放到rollback segement中,事务提交之后才生效;
如果有相应的trigger,执行的时候将被触发.
DELETE 不带WHERE 子句删除表中的所有数据. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。不影响表所占用的extent, 高水线(high watermark)保持原位置不动 .
以下情况是TRUNCATE无法代替DELETE
1、要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识。
2、需要使用触发器的情况下不能使用 TRUNCATE TABLE ,它不会激发触发器。
3、对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。
4、对于参与了索引视图的表不能使用 TRUNCATE TABLE ,注意指索引视图,并非普通视图。
执行速度:
DROP>TRUNCATE>DELETE
推荐阅读
- 数据库|SQL行转列方式优化查询性能实践
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- linux笔记|linux 常用命令汇总(面向面试)
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 面试|我经历的IT公司面试及离职感受(转)
- android-面试|我经历的IT公司面试及离职感受
- Java|一个月内面了30家企业,不断对比薪资,我从18K变成了38K
- vue|Vue面试常用详细总结