1、SQLSERVER Truncate
的使用數據庫
當你再也不須要該表時, 用 drop
;當你仍要保留該表,但要刪除全部記錄時, 用 truncate
;當你要刪除部分記錄時(always with a WHERE clause
), 用 delete
.安全
Truncate
是一個可以快速清空資料表內全部資料的SQL語法。而且能針對具備自動遞增值的字段,作計數重置歸零從新計算的做用。函數
2、Truncate
使用注意事項日誌
一、TRUNCATE TABLE
在功能上與不帶 WHERE
子句的 DELETE
語句相同:兩者均刪除表中的所有行。但 TRUNCATE TABLE
比 DELETE
速度快,且使用的系統和事務日誌資源少。code
二、DELETE
語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE
經過釋放存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放。因爲TRUNCATE TABLE
操做是不進行日誌記錄的,因此建議在TRUNCATE TABLE
語句以前使用BACKUP DATABASE
語句來對數據庫作備份。索引
三、TRUNCATE TABLE
刪除表中的全部行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。若是想保留標識計數值,請改用 DELETE
。若是要刪除表定義及其數據,請使用 DROP TABLE
語句。事務
四、不能對如下表使用 TRUNCATE TABLE
:由 FOREIGN KEY
約束引用的表。(您能夠截斷具備引用自身的外鍵的表。)參與索引視圖的表。經過使用事務複製或合併複製發佈的表。對於具備以上一個或多個特徵的表,請使用 DELETE
語句。TRUNCATE TABLE
不能激活觸發器,由於該操做不記錄各個行刪除。資源
五、對用TRUNCATE TABLE
刪除數據的表上增長數據時,要使用UPDATE STATISTICS
來維護索引信息。it
七、若是有ROLLBACK
語句,DELETE
操做將被撤銷,但TRUNCATE
不會撤銷。效率
3、TRUNCATE、Drop、Delete
區別
1.drop
和delete
只是刪除表的數據,drop語句將刪除表的結構、被依賴的約束、觸發器、索引;依賴於該表的存儲過程/函數將保留,可是變爲invalid
狀態。
2.delete
語句是DML
語言,只是刪除表中某些數據,表結構還在。Delete
能夠帶where
子句來刪除一部分數據,例如 DELETE FROM Student WHERE sAge > 20
。自動編號不恢復到初始值。
3.效率方面:drop > truncate > delete
4.安全性:當心使用drop
與truncate
,尤爲是在 沒有備份的時候,想刪除部分數據可以使用delete
須要帶上where
子句,回滾段要足夠大,想刪除表能夠用drop
,想保留表只是想刪除表的全部數據、 若是跟事物無關可使用truncate
,若是和事物有關、又或者想觸發 trigger
,仍是用delete
,若是是整理表內部的碎片,能夠用truncate
跟上reuse stroage
,再從新導入、插入數據。
5.delete
是DML
語句,不會自動提交。drop/truncate
都是DDL
語句,執行後會自動提交。
六、drop
通常用於刪除表自己,即表中數據和表結構(列、約束、視圖、鍵)所有刪除;delete
用於刪除局部性數據 如表中的某一元組drop
把表結構都刪了;delete
只是把數據清掉