Oracle delete truncate drop 的区别

本文详细比较了SQL中的DELETE、TRUNCATE和DROP操作的区别。包括它们对数据的影响、事务处理方式、空间释放机制以及对外键约束的处理等。DELETE用于逐条删除记录,支持回滚;TRUNCATE和DROP则用于快速清空表且不支持回滚。

1.delete/truncate只删除数据不删除表,索引的结构。drop将删除表的结构依赖的index/constrain/trigger,依赖于该表的procedure/function将保留,但是变为invalid状态;

2.delete是dml,写rollbacksegement,可回滚,速度慢,事务提交之后才生效。在9i满足undo_retention条件下可使用flashback。一次性大批量数据的delete可能导致回滚段急剧扩展从而影响到数据库,慎用,触发triggertruncate/dropddl,隐式提交,不写rollbacksegment,不能回滚,速度快。9i不能使用flashback,不触发trigger

3.delete不影响表所占用的extentHWM保持原位置不动,即使删除的是最靠近HWM的数据。delete其实也可以释放空间,但是不降低HWMdeleteblock的空闲空间达到pct_used,就可以重用。truncate缺省情况下将空间(表和索引)释放到minextentsextent,除非使用reusestoragetruncate会将高水线复位(回到最开始)drop将表所占用的空间全部释放,segment不存在,无所谓HWM的概念;

Oracle高水位(HWM)

http://blog.youkuaiyun.com/xujinyang/article/details/6830245

4.truncate/drop的对象必须是本模式下的,或者被授予dropanytable的权限,但dropanytable权限不能truncate/dropsys的表。delete的对象必须是本模式下的,或者被授予deleteonSCHEMA.tabledeleteanytable的权限,但deleteanytable权限不能deletesys的表;

5.不能truncate一个带有enable外键的表,不管表里有没有数据,如果要truncate,首先要disable外键或者删除外键(drop外键的表肯定是删除了外键)。不能drop一个带有enable外键的表,不管表里有没有数据,如果要drop,首先要删除外键,或者直接用droptableTABLE_NAMEcascadeconstraints;级联删除外键。delete可以。

转载自网络

------------------------------------------------------------------------------

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值