DROP,TRUNCATE,DELETE三者的区别!!!(面试的时候问到频率比较高的)

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;

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,小细节,delete,面试,table,语言,dll,存储)