TRUNCATE的使用

1、SQLSERVER Truncate的使用數據庫

當你再也不須要該表時, 用 drop;當你仍要保留該表,但要刪除全部記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.安全

Truncate是一個可以快速清空資料表內全部資料的SQL語法。而且能針對具備自動遞增值的字段,作計數重置歸零從新計算的做用。函數

2、Truncate使用注意事項日誌

一、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:兩者均刪除表中的所有行。但 TRUNCATE TABLEDELETE 速度快,且使用的系統和事務日誌資源少。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.dropdelete只是刪除表的數據,drop語句將刪除表的結構、被依賴的約束、觸發器、索引;依賴於該表的存儲過程/函數將保留,可是變爲invalid狀態。

2.delete語句是DML語言,只是刪除表中某些數據,表結構還在。Delete 能夠帶where子句來刪除一部分數據,例如 DELETE FROM Student WHERE sAge > 20。自動編號不恢復到初始值。

3.效率方面:drop > truncate > delete

4.安全性:當心使用droptruncate,尤爲是在 沒有備份的時候,想刪除部分數據可以使用delete須要帶上where子句,回滾段要足夠大,想刪除表能夠用drop,想保留表只是想刪除表的全部數據、 若是跟事物無關可使用truncate,若是和事物有關、又或者想觸發 trigger,仍是用delete,若是是整理表內部的碎片,能夠用truncate跟上reuse stroage,再從新導入、插入數據。

5.deleteDML語句,不會自動提交。drop/truncate都是DDL語句,執行後會自動提交。

六、drop通常用於刪除表自己,即表中數據和表結構(列、約束、視圖、鍵)所有刪除;delete用於刪除局部性數據 如表中的某一元組drop把表結構都刪了;delete只是把數據清掉

相關文章
相關標籤/搜索