區別
在功能上truncate是清空一個表的內容它相當於delete from table_name
delete是dml操作truncate是ddl操作因此用delete刪除整個表的數據時會產生大量的roolback占用很多的rollback segments 而truncate不會
在內存中用delete刪除數據表空間中其被刪除數據的表占用的空間還在便於以後的使用另外它是假相的刪除相當於windows中用delete刪除數據是把數據放到回收站中還可以恢復當然如果這個時候重新啟動系統(OS或者RDBMS)它也就不能恢復了!
而用truncate清除數據內存中表空間中其被刪除數據的表占用的空間會被立即釋放相當於windows中用shift+delete刪除數據不能夠恢復!
truncate 調整high water mark 而delete不truncate之後TABLE的HWM退回到 INITIAL和NEXT的位置(默認)delete 則不可以
truncate 只能對TABLEdelete 可以是tableviewsynonym
TRUNCATE TABLE 的對象必須是本模式下的或者有drop any table的權限 而 DELETE 則是對象必須是本模式下的或被授予 DELETE ON SCHEMATABLE 或DELETE ANY TABLE的權限
在外層中truncate或者delete後其占用的空間都將釋放
truncate和delete只刪除數據而drop則刪除整個表(結構和數據)
From:http://tw.wingwit.com/Article/program/Oracle/201311/17545.html