truncate、delete與drop的區別

truncate、delete與drop的區別
相同點:
         1.truncate和不帶where子句的delete,以及drop都會刪除表內的數據。
         2.drop、truncate都是DDL語句(數據定義語言),執行後會自動提交。
不同點:
         1.truncate和delete只是刪除數據不刪除表的結構。drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index);依賴於該表的存儲過程/函數將保留,但是變爲invalid。 (總之一句話,truncate與delete都是刪除全部的數據,但是表還存在,但是drop是全部刪除,表不存在了) 
       2.就刪除的速度來說:drop > truncate >delete     刪除的時候truncate比delete使用的系統和事務日誌資源少。delete語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。truncate table通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。    
    3.在安全的角度來講:謹慎使用drop和truncate,尤其是沒有備份的情況下,不讓你哭都來不及了。謹慎。
使用上,想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用 drop
想保留表而將所有數據刪除,如果和事務無關,用truncate即可。如果和事務有關,或者想觸發trigger,還是用delete。
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。
truncate、delete與drop的區別
相同點:
         1.truncate和不帶where子句的delete,以及drop都會刪除表內的數據。
         2.drop、truncate都是DDL語句(數據定義語言),執行後會自動提交。
不同點:
         1.truncate和delete只是刪除數據不刪除表的結構。drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index);依賴於該表的存儲過程/函數將保留,但是變爲invalid。 (總之一句話,truncate與delete都是刪除全部的數據,但是表還存在,但是drop是全部刪除,表不存在了) 
       2.就刪除的速度來說:drop > truncate >delete     刪除的時候truncate比delete使用的系統和事務日誌資源少。delete語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。truncate table通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。    
    3.在安全的角度來講:謹慎使用drop和truncate,尤其是沒有備份的情況下,不讓你哭都來不及了。謹慎。
使用上,想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用 drop
想保留表而將所有數據刪除,如果和事務無關,用truncate即可。如果和事務有關,或者想觸發trigger,還是用delete。
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章