ixdba.net,讨论linux+oracle技术

truncate,delete,drop的比较

上一篇 / 下一篇  2008-09-07 22:24:39 / 个人分类:oracle数据库

注意:这里说的delete是指不带where子句的delete语句

va:o'~s[0

IXPUB技术博客-\n!\tY7m6U5M([
相同点:truncate和不带where子句的delete,以及drop都会删除表内的数据

_"i@Y'p.V0

IXPUB技术博客m l8h1r:V nH
不同点:IXPUB技术博客x@2X$I]d#m0k1D6X\
1. truncate
delete只删除数据不删除表的结构(定义)IXPUB技术博客NIo6f ^z I
drop
语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态.IXPUB技术博客 o;Av:N2_J^

IXPUB技术博客;P1u'\ T ~D)j-f0M3j4Ud
2.delete
语句是DML,这个操作会放到rollback segement,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.IXPUB技术博客R:r'q4\'v5~0TY k{
truncate,drop
DDL,操作立即生效,原数据不放到rollback segment,不能回滚.操作不触发trigger.

amuj wd6i]$M0

IXPUB技术博客x!XG*~3j(p
3.delete
语句不影响表所占用的extent,高水线(high watermark)保持原位置不动
,@(Y$I Iw!QD&f(^0
显然drop语句将表所占用的空间全部释放
b p,|7f?;J^0truncate
语句缺省情况下见空间释放到minextentsextent,除非使用reuse storage; truncate会将高水线复位(回到最开始).

1X3ke"V4kHU4H.@0


?&] B+v!x%]]04.
速度,一般来说: drop> truncate > delete

0Q7h,@t.Hm2e*a*@u0


KOSO*kX05.
安全:小心使用droptruncate,尤其没有备份的时候.否则哭都来不及IXPUB技术博客O2|2|g-F#Y%D
使用上,想删除部分数据行用delete,注意带上where子句.回滚段要足够大
.
Unu1k9n:u)o6@tAo0V0
想删除表,当然用
drop
i/J%N'j,{S3?0
想保留表而将所有数据删除.如果和事务无关,truncate即可.如果和事务有关,或者想触发trigger,还是用
delete.IXPUB技术博客,v|,~ w w%[
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

r'l,Q,d^ {@-_d0

)CX7ar T Xp0 

6cS/PlBIc8Oq0

TAG: delete drop truncate

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 16568
  • 日志数: 116
  • 书签数: 3
  • 建立时间: 2007-12-12
  • 更新时间: 2009-01-08

RSS订阅

Open Toolbar