Truncate、Drop 和 Delete的異同

相同點:
truncate
和不帶where子句的delete, 以及drop都會刪除表內的數據 

不同點
1. truncate
delete只刪除數據不刪除表的結構(定義
    drop
語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的存儲過程/函數將保留,但是變爲invalid狀態


2.delete
語句是dml,這個操作會放到rollback segement,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發

   truncate,drop
ddl, 操作立即生效,原數據不放到rollback segment,不能回滾. 操作不觸發
trigger. 
3.delete
語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動
 
 
顯然drop語句將表所佔用的空間全部釋放
 
  truncate
語句缺省情況下見空間釋放到 minextents extent,除非使用reuse storage;   truncate會將高水線復位(回到最開始
). 

4.
速度,一般來說
: drop>; truncate >; delete

5.
安全性:小心使用drop truncate,尤其沒有備份的時候
.
使用上,想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大

想刪除表,當然用
drop 
想保留表而將所有數據刪除. 如果和事務無關,truncate即可. 如果和事務有關,或者想觸發trigger,還是用
delete. 
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據


6.
使用方法:drop table tablenamedelete from tablename
truncate table tablename


發佈了23 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章