TRANCATE/DELETE/DROP 的详细区别(转)

本文详细比较了SQL中的delete、truncate和drop命令。从数据删除、表结构处理、事务管理及权限需求等方面进行了阐述,并讨论了这些命令对表空间的影响。

对delete,trancate,drop的一个详细的区别.

delete/truncate 只删除数据不删除表,索引的结构。


drop 将删除表的结构被依赖的 index/constrain/trigger,依赖于该表的

procedure/function 将保留,但是变为 invalid 状态。


delete 是 dml,写 rollback segement,可回滚,速度慢,事务提交之后才生效。

在 9i 满足 undo_retention 条件下可使用 flashback。一次性大批量数据的

delete 可能导致回滚段急剧扩展从而影响到数据库,慎用。触发 trigger。


truncate/drop 是 ddl,隐式提交,不写 rollback segment,不能回滚,速度快。9i

不能使用 flashback。不触发 trigger。


delete 不影响表所占用的 extent,HWM 保持原位置不动,即使删除的是最靠近

HWM 的数据。delete 其实也可以释放空间,但是不降低 HWM,delete 后 block

的空闲空间达到 pct_used,就可以重用。


truncate 缺省情况下将空间(表和索引)释放到 minextents 个 extent,除非使用

reuse storage。truncate 会将高水线复位(回到最开始)。


drop 将表所占用的空间全部释放,segment 不存在,无所谓 HWM 的概念。


truncate/drop 的对象必须是本模式下的,或者被授予 drop any table 的权限,但

 drop any table 权限不能 truncate/drop sys 的表。


delete 的对象必须是本模式下的,或者被授予 delete on SCHEMA.table 或 delete

any table 的权限,但 delete any table 权限不能 delete sys 的表。


不能 truncate 一个带有 enable 外键的表,不管表里有没有数据,如果要

truncate,首先要 disable 外键或者删除外键(drop 外键的表肯定是删除了外

键)。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14864453/viewspace-402902/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14864453/viewspace-402902/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值