ITPub博客

首页 > 数据库 > Oracle > 简述truncate、delete和drop

简述truncate、delete和drop

原创 Oracle 作者:luisedalian 时间:2014-01-12 11:21:13 0 删除 编辑

使用Truncate 将会:

1.清除相应索引(不是Drop,仍然保留extent) ;

2.受外键参考的约束(FOREIGN KEY).当然必须先DISABLE 或DROP 相应的外键参考,才能TRUNCATE,注意没有CASCADE 选项 .

3.不触发DELETE 触发器

4.若使用了DROP STORAGE(缺省), 除了已指定的MINEXTENTS,其它EXTENT 重新分配NEXT_EXTENT 设置MINEXTENTS 之后的EXTENT,High-Water Mark 复位指向表中的第一个BLOCK。 使用REUSE STORAGE 保留表的使用空间 ,保留原来的扩展,但不合并; HWM(高水位)的位置RESET 到第一个BLOCK。 当使DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT 参数。 REUSESTORAGE 不会缩短表或者调整NEXT 参数。另外一个区别是,用reuse storage可以减少对表及数据字典的锁定时间,特别是大表常这样做,余下和DEALLOCATEUNUSED 来逐步回收空间。Truncate 语句缺省情况(缺省情况为drop storage)下空间释放到 minextents个 extent, 除非使用reuse storage (如果使用reuse storage,那么这些删除之后留下的空间会被保持) ; Truncate 会将高水线复位(回到最开始)。 如果是整理表内部的碎片,可以用truncate 跟上reuse stroage,再重新导入/插入数据。

 

Delete 语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 。 Delete 语句是DML,这个操作会放到rollback segement 中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。Drop 语句将表所占用的空间全部释放 。 drop 语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid 状态 。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1069690/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 常见问题汇总
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6040946