删除表(记实和结构)的优缦沱delete ———— truncate ———— drop DELETE (删除数据内外记实的语句)0 j6 E- ]& s3 z/ D& |, e' X
DELETE FROM表名 WHERE 前提;& U, i5 m' P& C0 \/ a
注重:删除记实并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.
4 g$ P( ]* s; a% q+ \ 如不美观确实要删除一个年夜内外的全数记实, 可以用 TRUNCATE 呼吁, 它可以释放占用的数据块表空间, |; X0 L. E0 M4 ~
TRUNCATE TABLE 表名;3 \0 l5 g4 j# l# }0 }% o3 P7 i$ C
此操作不成回退.( \# i8 h1 s0 c) i8 V6 s
不异点
. }0 V% }# p G/ d5 ~ truncate和不带where子句的delete, 以及drop城市删除表内的数据- j7 h7 L1 K. N* u m7 _- P
注重:这里说的delete是指不带where子句的delete语句0 p6 g1 N j4 a6 u! W
分歧点:+ W& ?8 y' [" A2 i
1. truncate和 delete只删除数据不删除表的结构(界说)* j: \: Y- i$ V! H1 c
drop语句将删除表的结构被依靠的约束(constrain),触发器(trigger),索引(index); 依靠于该表的存储过程/函数将保留,可是变为invalid状况.9 F" v# l ?. l
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如不美观有响应的trigger,执行的时辰将被触发.' C7 K" H; l- m O% Z
truncate,drop是ddl, 操作当即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
6 }9 t V6 w6 I2 C! w8 t/ @* n 3.delete语句不影响表所占用的extent, 高水线(high watermark)连结原位置不动
1 r" b; Y5 W, y& T0 K$ A 显然drop语句将表所占用的空间全数释放
$ h, I' j+ b4 A' w) F truncate 语句缺盛意形下见空妓晔着到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最起头).6 I! a/ O/ V' \: v8 y
4.速度,一般来说: drop>; truncate >; delete: B5 T2 g+ u/ Y$ g$ n$ w1 F
5.平安性:小心使用drop 和truncate,尤其没有备份的时辰.否则哭都来不及
, {3 {, R$ g4 i5 o" K: L: m- I) I5 T 使用上,想删除部门数据行用delete,注重带上where子句. 回滚段要足够年夜.
5 |3 ~( {+ k4 }, o( }4 C 想删除表,当然用drop
& s6 O1 b2 b) M: B4 z. x 想保留表而将所稀有据删除. 如不美观和事务无关,用truncate即可. 如不美观和事务有关,或者想触发trigger,仍是用delete.
" e1 V) r/ s' x3 V9 O$ M8 J 如不美观是清算表内部的碎片,可以用truncate跟上reuse stroage,再年夜头导入/插入数据" V" Y5 l0 y) z3 i1 f! `7 j
oracle中删除表中的一列语句
' g i. l! W, j8 b3 R$ g2 u alter table 表名 drop colum 列名 |