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条)