第一種回答
Drop、Delete、Truncate都表示刪除,但是三者有一些差別:
Delete用來刪除表的全部或者一部分數據行,執行delete之后,用戶需要提交(commmit)或者回滾 (rollback)來執行刪除或者撤銷刪除,會觸發這個表上所有的delete觸發器。
Truncate刪除表中的所有數據,這個操作不能回滾,也不會觸發這個表上的觸發器,TRUNCATE比 delete更快,占用的空間更小。
Drop命令從數據庫中刪除表,所有的數據行,索引和權限也會被刪除,所有的DML觸發器也不會被觸 發,這個命令也不能回滾。
因此,在不再需要一張表的時候,用Drop;在想刪除部分數據行時候,用Delete;在保留表而刪除所有 數據的時候用Truncate。
第二種回答
Drop直接刪掉表;
Truncate刪除表中數據,再插入時自增長id又從1開始 ;
Delete刪除表中數據,可以加where字句。
具體解析
1. DELETE語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日 志中保存以便進行進行回滾操作。TRUNCATE TABLE 則一次性地從表中刪除所有的數據並不把單獨 的刪除操作記錄記入日志保存,刪除行是不能恢復的。並且在刪除的過程中不會激活與表有關的刪除 觸發器。執行速度快。
2. 表和索引所占空間。當表被TRUNCATE 后,這個表和索引所占用的空間會恢復到初始大小,而 DELETE操作不會減少表或索引所占用的空間。drop語句將表所占用的空間全釋放掉。
3. 一般而言,drop > truncate > delete
4. 應用范圍。TRUNCATE 只能對TABLE;DELETE可以是table和view
5. TRUNCATE 和DELETE只刪除數據,而DROP則刪除整個表(結構和數據)。
6. truncate與不帶where的delete :只刪除數據,而不刪除表的結構(定義)drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger)索引(index);依賴於該表的存儲過程/函數將被保留,但其狀態會變為:invalid。
7. delete語句為DML(Data Manipulation Language),這個操作會被放到 rollback segment中,事務提交后才生效。如果有相應的 tigger,執行的時候將被觸發。
8. truncate、drop是DDL(Data Define Language),操作立即生效,原數據不放到 rollback segment中,不能回滾
9. 在沒有備份情況下,謹慎使用 drop 與 truncate。要刪除部分數據行采用delete且注意結合where來約束 影響范圍。回滾段要足夠大。要刪除表用drop;若想保留表而將表中數據刪除,如果與事務無關,用 truncate即可實現。如果和事務有關,或老是想觸發trigger,還是用delete。
10. Truncate table 表名 速度快,而且效率高,因為: truncate table 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和 事務日志資源少。DELETE 語句每次刪除一行,並在事務日志中為所刪除的每行記錄一項。 TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日志中記錄頁的釋放。
11. TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的 計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其數據, 請使用 DROP TABLE 語句。
12. 對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器。