清空表里數據sql sql清空表內容



文章插圖
清空表里數據sql sql清空表內容

文章插圖
1.不需要該表時,用drop;
2.當仍然需要保留該表,但要刪除所有記錄時,用truncate
3.當要刪除部分記錄(always with a where clause)用delete
truncate 是一個能夠快速清空資料表內所有資料的SQL語法,并且能針對具有自動遞增的字段,做計數重置歸零重新計算的作用
一、Truncate語法
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
二、Truncate使用注意事項
1、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行 。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少 。
2、DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項 。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放 。
3、TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變 。新行標識所用的計數值重置為該列的種子 。如果想保留標識計數值,請改用 DELETE 。如果要刪除表定義及其數據,請使用 DROP TABLE 語句 。
4、對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句 。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器 。
5、TRUNCATE TABLE 不能用于參與了索引視圖的表 。
6、對用TRUNCATE TABLE刪除數據的表上增加數據時,要使用UPDATE STATISTICS來維護索引信息 。
7、如果有ROLLBACK語句,DELETE操作將被撤銷,但TRUNCATE不會撤銷 。
不能對一下表使用TRUNCATE TABLE
1、由 FOREIGN KEY 約束引用的表 。(您可以截斷具有引用自身的外鍵的表 。)
2、參與索引視圖的表 。
3、通過使用事務復制或合并復制發布的表 。
4、對于具有以上一個或多個特征的表,請使用 DELETE 語句 。
5、TRUNCATE TABLE 不能激活觸發器,因為該操作不記錄各個行刪除 。
四、TRUNCATE、Drop、Delete區別
1.drop和delete只是刪除表的數據(定義),drop語句將刪除表的結構、被依賴的約束(constrain)、觸發器 (trigger)、索引(index);依賴于該表的存儲過程/函數將保留,但是變為invalid狀態 。
2.delete語句是DML語言,這個操作會放在rollback segement中,事物提交后才生效;如果有相應的觸發器(trigger),執行的時候將被觸發 。truncate、drop是DDL語言,操作后即 生效,原數據不會放到rollback中,不能回滾,操作不會觸發trigger 。
3.delete語句不影響表所占用的extent、高水線(high watermark)保持原位置不動 。drop語句將表所占用的空間全部釋放 。truncate語句缺省情況下將空間釋放到minextents的 extent,除非使用reuse storage 。truncate會將高水線復位(回到最初) 。
4.效率方面:drop > truncate > delete
5.安全性:小心使用drop與truncate,尤其是在 沒有備份的時候,想刪除部分數據可使用delete需要帶上where子句,回滾段要足夠大,想刪除表可以用drop,想保留表只是想刪除表的所有數據、 如果跟事物無關可以使用truncate,如果和事物有關、又或者想觸發 trigger,還是用delete,如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入、插入數據 。
6.delete是DML語句,不會自動提交 。drop/truncate都是DDL語句,執行后會自動提交 。
7、drop一般用于刪除整體性數據 如表,模式,索引,視圖,完整性限制等;delete用于刪除局部性數據 如表中的某一元組
8、DROP把表結構都刪了;DELETE只是把數據清掉
【清空表里數據sql sql清空表內容】9、當你不再需要該表時,用 drop;當你仍要保留該表,但要刪除所有記錄時,用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.