您的位置:首页 > 职场人生

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

2010-07-14 09:56 525 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: