oracle中truncate和delete的区别比较

在oracle数据库中,使用truncate和使用delete都可以实现删除一个表中的数据操作,但是它们却存在着很大的不同。truncate的作用是清空一个表格,在删除数据方面,truncate与delete存在如下一些方面的不同:

(1)在数据处理功能上,truncate是清空一个表的所有内容,它相当于delete from table_name。

(2)delete是DML操作,而truncate是DDL操作。因此,用delete删除整个表中的数据时,会产生大量的rollback,占用很多的rollback segments,而truncate则不会,也就是说如果你使用truncate清空了一张表,那么想后悔都不行了。

(3)在内存中,用delete删除数据,表空间中被删除数据的表占用的空间还在,便于以后使用,另外它还是“假象”的删除,相当于在Windows中按下【DELETE】键删除数据把数据放到回收站中,还可以恢复。当然,如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了。

(4)在内存中,用truncate清除数据,表空间中被删除数据的表占用的空间会被立即释放,相当于在Windows中按下【Shift+Delete】组合键删除数据,不能够恢复。

(5)truncate调整高水位线(High Water Mark,HWM),而delete不调整;使用truncate之后,table的HWM退回到INITIAL和Next的位置(默认位置),delete则不可以。HWM一般是相对于一个表而言的,当一个表有数据不断插入时,HWM的值不断提高,对那些全表扫描的select查询是以HWM为终点的,即使表中可能只有一行记录。HWM也是表的空间曾经扩充到的值。

(6)truncate table的对象必须是本模式下的,或者当前用户被授予了drop any table的权限;而delete的对象必须是笨模式下的,或当前用户被授予delete on schematable或delete any table的权限。

(7)在外层中,执行truncate或者delete操作后,其占用的空间都将被释放。

(8)truncate和delete只删除数据,而drop则删除整个表(结构和数据)。

本文标题:oracle中truncate和delete的区别比较

本文链接:http://yedward.net/?id=129

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章