DELETE和TRUNCATE的區別

 

delete from aa
truncate table aa

區別
1、delete from後面可以寫條件,truncate不可以
2、delete from記錄是一條條刪的,所刪除的每行記錄都會進日誌,而truncate一次性刪掉整個頁,因此日至裏面只記錄頁釋放,簡言之,delete from更新日誌,truncate基本不,所用的事務日誌空間較少
3、delete from刪空表後,會保留一個空的頁,truncate在表中不會留有任何頁
4、當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。truncate始終鎖定表和頁,而不是鎖定各行。
5、如果有identity產生的自增id列,delete from後仍然從上次的數開始增加,即種子不變,而truncate後,種子會恢復初始
6、truncate不會觸發delete的觸發器,因爲truncate操作不記錄各個行刪除

------------------------------------------------------------------------------------------

 

TRUNCATE   TABLE   在功能上與不帶   WHERE   子句的   DELETE   語句相同:二者均刪除表中的全部行。但   TRUNCATE   TABLE   比   DELETE   速度快,且使用的系統和事務日誌資源少。   

DELETE   語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE   TABLE   通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。 

TRUNCATE   TABLE   刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。如果想保留標識計數值,請改用   DELETE。如果要刪除表定義及其數據,請使用   DROP   TABLE   語句。 

對於由   FOREIGN   KEY   約束引用的表,不能使用   TRUNCATE   TABLE,而應使用不帶   WHERE   子句的   DELETE   語句。由於   TRUNCATE   TABLE   不記錄在日誌中,所以它不能激活觸發器。   

TRUNCATE   TABLE   不能用於參與了索引視圖的表。 

 

速度,一般來說:   drop  >   truncate   >   delete

發佈了18 篇原創文章 · 獲贊 27 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章