1.三者共同點:數據庫
truncate、不帶where字句的delete、drop都會刪除表內的數據函數
2.drop、truncate的共同點:日誌
drop、truncate都得DDL語句(數據庫定義語言),執行後自動提交索引
1. drop與truncate、delete的不一樣點事務
truncate 和 delete 只刪除數據不刪除表的結構(定義)資源
drop 語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴於該表的存儲過程/函數將保留,可是變爲 invalid 狀態。引用
2. delete與truncate、drop的不一樣點數據
delete 語句是數據庫操做語言(dml),這個操做會放到 rollback segement 中,事務提交以後才生效;若是有相應的 trigger,執行的時候將被觸發。存儲過程
truncate、drop 是數據庫定義語言(ddl),操做當即生效,原數據不放到 rollback segment 中,不能回滾,操做不觸發 trigger。語言
4.速度
通常來講: drop> truncate > delete
5.使用上
想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,固然用 drop
想保留表而將全部數據刪除,若是和事務無關,用truncate便可。若是和事務有關,或者想觸發trigger,仍是用delete。
若是是整理表內部的碎片,能夠用truncate跟上reuse stroage,再從新導入/插入數據。
6.truncate與delete
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:兩者均刪除表中的所有行。
但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。
DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 經過釋放存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放。
對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。
因爲 TRUNCATE TABLE 不記錄在日誌中,因此它不能激活觸發器。
TRUNCATE TABLE 不能用於參與了索引視圖的表。