使用場景安全
當你再也不須要該表時, 用 drop;當你仍要保留該表,但要刪除全部記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.ide
TRUNCATE、Drop、Delete區別函數
刪除表中的數據的方法有delete,truncate, 其中TRUNCATE TABLE用於刪除表中的全部行,而不記錄單個行刪除操做。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句相似;可是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日誌資源更少spa
具體分析
1.drop和delete只是刪除表的數據(定義),drop語句將刪除表的結構、被依賴的約束(constrain)、觸發器 (trigger)、索引(index);依賴於該表的存儲過程/函數將保留,可是變爲invalid狀態。
日誌
2.delete語句是DML語言,這個操做會放在rollback segement中,事物提交後才生效;若是有相應的觸發器(trigger),執行的時候將被觸發。truncate、drop是DDL語言,操做後即 生效,原數據不會放到rollback中,不能回滾,操做不會觸發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.delete是DML語句,不會自動提交。drop/truncate都是DDL語句,執行後會自動提交。
七、drop通常用於刪除總體性數據 如表,模式,索引,視圖,完整性限制等;delete用於刪除局部性數據 如表中的某一元組
八、DROP把表結構都刪了;DELETE只是把數據清掉
九、當你再也不須要該表時, 用 drop;當你仍要保留該表,但要刪除全部記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.orm