delete from table where
直接刪除表中的某一行數據,並且同時將該行的刪除操作作為事務記錄在日志中保存以便進行進行回滾操作。所以delete相比較truncate更加占用資源,數據空間不釋放,因為需回滾。對table和view都能操作
truncate table
一次性地從表中刪除所有的數據(釋放存儲表數據所用的數據頁來刪除數據)並不把單獨的刪除操作記錄記入日志保存(只在事務日志中記錄 頁的釋放),因此也不能回滾,不能恢復數據,在刪除的過程中不會激活與表有關的刪除觸發器,占用資源更加少,速度更快。數據空間會釋放,這個表和索引所占用的空間會恢復到初始大小。只能操作沒有關聯視圖的table
drop table
刪除的是整個表,包括表的結構,數據,定義。永久抹去,空間釋放。對table和view都能操作
由於 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器,對於外鍵(foreignkey )約束引用的表,不能使用 truncate table,而應使用不帶 where 子句的 delete 語句。
truncate table不能用於參與了索引視圖的表
