SQL中Truncate的用法

来源:https://www.cnblogs.com/dreamrobot/archive/2018/08/02/9405665.html
-Advertisement-
Play Games

本文導讀:刪除表中的數據的方法有delete,truncate, 其中TRUNCATE TABLE用於刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日誌資源 ...


本文導讀:刪除表中的數據的方法有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.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mysql的概述 Mysql的安裝和初次使用 Mysql的基本概念 1. Mysql的英文單詞是: database,簡稱 DB. 2. 什麼是資料庫? 用於存儲和管理數據的倉庫 3. 資料庫的特點: 持久化存儲數據.其實資料庫就是一個文件系統 方便存儲和管理數據. 使用統一的方式操作資料庫. 4. ...
  • 一臺資料庫伺服器的事務日誌備份作業偶爾會出現幾次備份失敗的情況,具體的錯誤信息為: DATE/TIME: 2018/7/30 12:10:52 DESCRIPTION: BackupDiskFile::CreateMedia: Backup device 'M:\DB_BACKUP\LOG_BACK... ...
  • 一、前言 在之前的文章已經詳細介紹了redis入門基礎已經持久化相關內容包括redis4.0所提供的混合持久化。 通過持久化功能,Redis保證了即使在伺服器宕機情況下數據的丟失非常少。但是如果這台伺服器出現了硬碟故障、系統崩潰等等,不僅僅是數據丟失,很可能對業務造成災難性打擊。為了避免單點故障通常 ...
  • 從SQLServer導數據到Oracle大概有以下幾種方法: 1. 使用SSMS的導出數據嚮導,使用Microsoft ODBC for Oracle或Oracle Provider for OLE DB連接到Oracle 2. 導出到平面文件 3. 導出包含數據的SQL腳本。 4. 使用ETL工具 ...
  • 一:在新表已經建立好的情況下 1,拷貝所有的欄位 insert into new_table select * from old_table 2,拷貝部分欄位表 insert into new_table(id,name,sex) select id,name,sex from old_table ...
  • 經濟學上有個“海盜分金”模型,如何用sql解決,並優化sql ...
  • 原文:http://blog.itpub.net/9240380/viewspace-666622/ SQL> declare 2 v_sid v$session.sid%type; --定義如下兩個type類型,用於接收cursorv_serial# v$session.serial#%type; ...
  • 大數據分析如今已不能再稱之為新技術。大多數移動應用程式開發人員已經明白,他們需要挖掘他們的數據來積極獲取日常的見解。許多大型應用程式開發企業已經意識到,要在市場上不斷地發展和更新,必須採用大數據技術。亞馬遜,微軟,甲骨文等大型跨國公司已經採用了大數據解決方案來拓展業務,希望為消費者提供最好的服務。科 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...