ITPub博客

首页 > Linux操作系统 > Linux操作系统 > truncate 与delete 的区别

truncate 与delete 的区别

原创 Linux操作系统 作者:552119618 时间:2011-03-06 21:04:10 0 删除 编辑

 转与(http://blog.csdn.net/gxj022/archive/2009/05/13/4177759.aspx

备忘。

1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。


2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 并且会占用很多时间而truncate不会。truncate会很快删没数据。


3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,(需要使用ALTER TABLESPACE *** COALESCE;来弄出空间来),另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!
而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!


4、truncate 调整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不可以。


5、truncate 只能对TABLE,delete 可以是table,view,synonym。


6、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。


7、在外层中,truncate或者delete后,其占用的空间都将释放。
8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。


 

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

请登录后发表评论 登录
全部评论

注册时间:2011-02-25

  • 博文量
    8
  • 访问量
    4708