1.delete/truncate只删除数据不删除表,索引的结构。drop将删除表的结构及依赖的index/constrain/trigger,依赖于该表的procedure/function将保留,但是变为invalid状态;
2.delete是dml,写rollbacksegement,可回滚,速度慢,事务提交之后才生效。在9i满足undo_retention条件下可使用flashback。一次性大批量数据的delete可能导致回滚段急剧扩展从而影响到数据库,慎用,触发trigger。truncate/drop是ddl,隐式提交,不写rollbacksegment,不能回滚,速度快。9i不能使用flashback,不触发trigger;
3.delete不影响表所占用的extent,HWM保持原位置不动,即使删除的是最靠近HWM的数据。delete其实也可以释放空间,但是不降低HWM,delete后block的空闲空间达到pct_used,就可以重用。truncate缺省情况下将空间(表和索引)释放到minextents个extent,除非使用reusestorage。truncate会将高水线复位(回到最开始)。drop将表所占用的空间全部释放,segment不存在,无所谓HWM的概念;
Oracle高水位(HWM)
http://blog.youkuaiyun.com/tianlesoftware/archive/2009/10/22/4707900.aspx
4.truncate/drop的对象必须是本模式下的,或者被授予dropanytable的权限,但dropanytable权限不能truncate/dropsys的表。delete的对象必须是本模式下的,或者被授予deleteonSCHEMA.table或deleteanytable的权限,但deleteanytable权限不能deletesys的表;
5.不能truncate一个带有enable外键的表,不管表里有没有数据,如果要truncate,首先要disable外键或者删除外键(drop外键的表肯定是删除了外键)。不能drop一个带有enable外键的表,不管表里有没有数据,如果要drop,首先要删除外键,或者直接用droptableTABLE_NAMEcascadeconstraints;级联删除外键。delete可以。
转载自网络
------------------------------------------------------------------------------
Blog:http://blog.youkuaiyun.com/tianlesoftware
网上资源:http://tianlesoftware.download.youkuaiyun.com
相关视频:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1群:62697716(满);DBA2群:62697977