oracle删除命令的区别

oracle删除命令的区别


2024年5月9日发(作者:)

truncate 、delete与drop区别

delete:dml语句,用于删除数据,可以回滚(反悔),可以精确删除。该语句非常耗

费资源,需要写undo回滚段,占用大量内存。delete语句是所有dml语句中最消耗资源

的语句。

truncat:DDL语句,清除数据。该操作不可回滚,不可精确删除。一旦操作,那么

不可找回。节省资源,但是该命令每次清除的基本单位为“段”,比如:table,partition,

subpartition等,不能选择清除某些数据。

drop:DDL语句,删除对象操作,上面的delete和truncate都是针对数据的,drop

是针对数据的载体的,当然他也可以删除其他的载体,面对基本对象为段。如果不加purge

参数,可在回收站找回,否则不可找回。

(1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除

操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地

从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。

并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

(2) 表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢

复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的

空间全释放掉。

(3) 一般而言,drop > truncate > delete

(4) 应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view

(5) TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。

(6) truncate与不带where的delete :只删除数据,而不删除表的结构(定义)

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖

于该表的存储过程/函数将被保留,但其状态会变为:invalid。

(7) delete语句为DML(data maintain Language),这个操作会被放到 rollback

segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。

(8) truncate、drop是DLL(data define language),操作立即生效,原数据不

放到 rollback segment中,不能回滚

(9) 在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用

delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留

表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师

想触发trigger,还是用delete。

(10) Truncate table 表名 速度快,而且效率高,因为:

truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表

中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源

少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE

TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释


发布者:admin,转转请注明出处:http://www.yc00.com/web/1715188077a2579565.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信