簡述truncate、delete和drop

LuiseDalian發表於2014-01-12

使用Truncate 將會:

1.清除相應索引(不是Drop,仍然保留extent) ;

2.受外來鍵參考的約束(FOREIGN KEY).當然必須先DISABLE DROP 相應的外來鍵參考,才能TRUNCATE,注意沒有CASCADE 選項 .

3.不觸發DELETE 觸發器

4.若使用了DROP STORAGE(預設), 除了已指定的MINEXTENTS,其它EXTENT 重新分配NEXT_EXTENT 設定MINEXTENTS 之後的EXTENTHigh-Water Mark 復位指向表中的第一個BLOCK。 使用REUSE STORAGE 保留表的使用空間 ,保留原來的擴充套件,但不合並; HWM(高水位)的位置RESET 到第一個BLOCK。 當使DROP STORAGE時將縮短表和表索引,將表收縮到最小範圍,並重新設定NEXT 引數。 REUSESTORAGE 不會縮短表或者調整NEXT 引數。另外一個區別是,用reuse storage可以減少對錶及資料字典的鎖定時間,特別是大表常這樣做,餘下和DEALLOCATEUNUSED 來逐步回收空間。Truncate 語句預設情況(預設情況為drop storage)下空間釋放到 minextents extent, 除非使用reuse storage (如果使用reuse storage,那麼這些刪除之後留下的空間會被保持) ; Truncate 會將高水線復位(回到最開始)。 如果是整理表內部的碎片,可以用truncate 跟上reuse stroage,再重新匯入/插入資料。

 

Delete 語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 。 Delete 語句是DML,這個操作會放到rollback segement 中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發。Drop 語句將表所佔用的空間全部釋放 。 drop 語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的儲存過程/函式將保留,但是變為invalid 狀態 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1069690/,如需轉載,請註明出處,否則將追究法律責任。

相關文章