注意:这里说的delete是指不带where子句的delete语句
va:o'~s[0IXPUB技术博客-\n!\tY7m6U5M([
相同点:truncate和不带where子句的delete,以及drop都会删除表内的数据
_"i@Y'p.V0IXPUB技术博客ml8h1r:V
nH
不同点:IXPUB技术博客x@2X$I]d#m0k1D6X\
1. truncate和delete只删除数据不删除表的结构(定义)IXPUB技术博客 NIo6f^zI
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.
amu j wd6i]$M0IXPUB技术博客x!XG*~3j(p
3.delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不动
,@(Y$I Iw!QD&f(^0显然drop语句将表所占用的空间全部释放
bp,|7f?;J^0truncate语句缺省情况下见空间释放到minextents个extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
1X3ke"V4kHU4H.@0
?&]B+v!x%]]04.速度,一般来说: drop> truncate > delete
0Q7h,@t.Hm2e*a*@u0
KOSO*kX05.安全性:小心使用drop和truncate,尤其没有备份的时候.否则哭都来不及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|,~
ww%[
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
r'l,Q,d^{@-_d0)CX7ar T Xp0
6cS/PlBIc8Oq0