SQL數據庫中Truncate的用法
runcate是一個能夠快速清空資料表內所有資料的SQL語法。這篇文章主要介紹了SQL中Truncate的用法,需要的朋友可以參考下...
Truncate是一個能夠快速清空資料表內所有資料的SQL語法。這篇文章主要介紹了SQL中Truncate的用法,需要的朋友可以參考下
刪除表中的數據的方法有delete,truncate, 其中TRUNCATE TABLE用于刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日志資源更少。下面介紹SQL中Truncate的用法
當你不再需要該表時, 用 drop;當你仍要保留該表,但要刪除所有記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.
Truncate是一個能夠快速清空資料表內所有資料的SQL語法。并且能針對具有自動遞增值的字段,做計數重置歸零重新計算的作用。
一、Truncate語法
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
參數
database_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只是把數據清掉
9、當你不再需要該表時, 用 drop;當你仍要保留該表,但要刪除所有記錄時, 用 truncate;當你要刪除部分記錄時(always with a WHERE clause), 用 delete.
總結
以上所述是小編給大家介紹SQL數據庫中Truncate的用法,希望對大家有所幫助.。
MyBatis SQL數據庫xml處理小于號與大于號正確的格式
文章主要介紹了MyBatis SQL xml處理小于號與大于號正確的格式,需要的朋友可以參考下 當我們需要通過xml格式處理sql語句時,經常會用到< ,<=,>,>=等符號,但是很容易引起xml格式的錯誤,這樣會導致后臺將xml字符串轉換為xml文檔時報錯,從而導致程序錯誤。...
SQL Server數據庫中分頁編號的另一種方式
文章主要介紹了SQL Server 分頁編號的另一種方式,需要的朋友可以參考下今天看書講T-SQL,看到了UNBOUNDED PRECEDING,就想比對下ROW_NUMBER()的運行速度。...
Sql Server數據庫的一些知識點定義和總結
文章主要給大家總結介紹了關于Sql Server的一些知識點定義文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習...
Win10系統服務器安裝MySQL8.0.13遇到的問題及解決方法
文章主要介紹了Win10系統安裝MySQL8.0.13遇到的問題及解決方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下...
MyBatis SQL xml處理小于號與大于號正確的格式
文章主要介紹了MyBatis SQL xml處理小于號與大于號正確的格式,需要的朋友可以參考下當我們需要通過xml格式處理sql語句時,經常會用到< ,<=,>,>=等符號,但是很容易引起xml格式的錯...
Sql Server數據庫開窗函數Over()的使用實例詳解
文章主要介紹了Sql Server 開窗函數Over()的使用,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下利用over(),將統計信息計算出來,然后直接篩選結果集 declare @t table(...
SQL在自增列插入指定數據的操作方法
SQL Server? 中數據表往往會設置自增列,常見的比如說 首列的ID列。 往數據表插入新數據的時候,自增列是跳過的,無需插入即會按照設置的自增規則進行列增長。...
SQL Server在分頁獲取數據的同時獲取到總記錄數的兩種方法
本文通過兩種方法給大家介紹SQL Server 在分頁獲取數據的同時獲取到總記錄數,感興趣的朋友跟隨腳本之家小編一起學習吧。SQL Server 獲取數據的總記錄數,有兩種方式:1.先分頁獲...
使用SQL語句去掉重復記錄的兩種方法
文章主要介紹了用SQL語句去掉重復的記錄的兩種方式,兩種方式都可以使用臨時表操作,具體實現方法大家跟隨小編一起通過本文學習吧海量數據(百萬以上),其中有些全部字段都相同,有些...
SQL server數據庫高可用日志傳送的方法
SQL Server 使用日志傳送,您可以自動將“主服務器”實例上“主數據庫”內的事務日志備份發送到單獨“輔助服務器”實例上的一個或多個“...