SQL關於刪除的三個語句:DROP、TRUNCATE、 DELETE 的區別。

来源:https://www.cnblogs.com/mlfan-java/archive/2018/12/22/10162862.html
-Advertisement-
Play Games

DROP: 刪除表test,並釋放空間,將test刪除的一干二凈。 TRUNCATE: 刪除表test里的內容,並釋放空間,但不刪除表的定義,表的結構還在。 DELETE: 1、刪除指定數據 刪除表test中年齡等於30的且國家為US的數據 2、刪除整個表 僅刪除表test內的所有內容,保留表的定義 ...


DROP:

DROP TABLE test;

刪除表test,並釋放空間,將test刪除的一干二凈。

TRUNCATE:

TRUNCATE test;

刪除表test里的內容,並釋放空間,但不刪除表的定義,表的結構還在。

DELETE:

1、刪除指定數據

刪除表test中年齡等於30的且國家為US的數據

DELETE FROM test WHERE age=30 AND country='US';

2、刪除整個表

僅刪除表test內的所有內容,保留表的定義,不釋放空間。

DELETE FROM test 或者 TRUNCATE test;


truncate table 命令將快速刪除數據表中的所有記錄,但保留數據表結構。這種快速刪除與 delete from 數據表的刪除全部數據表記錄不一樣,delete 命令刪除的數據將存儲在系統回滾段中,需要的時候,數據可以回滾恢復,而truncate 命令刪除的數據是不可以恢復的。

相同點

truncate 和不帶 where 子句的 delete, 以及 drop 都會刪除表內的數據。

不同點:

1. truncate 和 delete 只刪除數據不刪除表的結構(定義) ,drop 語句將刪除表的結構被依賴的約束(constrain), 觸發器(trigger), 索引(index); 依賴於該表的存儲過程/函數將保留, 但是變為 invalid 狀態。

2.delete 語句是 dml, 這個操作會放到 rollback segement 中, 事務提交之後才生效; 如果有相應的 trigger, 執行的時候將被觸發。 truncate, drop 是 ddl, 操作立即生效, 原數據不放到 rollback segment 中, 不能回滾。 操作不觸發 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, 再重新導入/插入數據。

 

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

-Advertisement-
Play Games
更多相關文章
  • 一:什麼叫委托 通過反射發現,委托其實是一個類,繼承自System.MulticastDelegate,但是System.MulticastDelegate這個類是特殊類,不能被繼承 二:委托的聲明 委托可以聲明在類外面,可以聲明再類裡面 三:委托的實例和調用 private int GetSome ...
  • private:私有成員,在類的內部才可以訪問 protected:保護成員,在類的內部和繼承類中可以訪問 public:公共成員,完全公開,沒有訪問限制 internal:當前程式集內可以訪問 ...
  • zcat 解壓有gzip壓縮的文件,將解壓結果送到標準輸出。 此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 1、語法 zcat [-fhVL] 文件 2、選項列表 選項 說明 -h | --help 幫助信息 -V | --vers ...
  • 備忘命令: 保持更新,轉載請註明出處。 ...
  • Ubuntu引導安裝 首先是安裝前的準備工作 1.需要安裝的 ubuntu系統的ISO鏡像。 2.easyBCD引導軟體 3.所在的Windows系統(本人win7下安裝) 4.DiskGenius(分區工具) 開始安裝前win7下準備工作 一、 網上下載ubuntu的iso(應該是是官方渠道吧) ...
  • 安裝Windows10 1803 版本後,發現網路上的機器好多不見了。 使用 ping 可以ping 通,但是訪問網路共用提示下麵錯誤。 這個原因是1803 中沒有安裝 SMB1.0 協議。因為 SMB1.0協議比較早,有安全問題, windows 10 在之後的版本中都不預設支持了。 如果想迴避這 ...
  • 1 前景提要 1.1 碎片化問題 分頁與分段 頁是信息的物理單位, 分頁是為了實現非連續分配, 以便解決記憶體碎片問題, 或者說分頁是由於系統管理的需要. 段是信息的邏輯單位,它含有一組意義相對完整的信息, 分段的目的是為了更好地實現共用, 滿足用戶的需要. 頁的大小固定且由系統確定, 將邏輯地址劃分 ...
  • 一 前期準備 1.1 依賴準備 編譯安裝需要依賴的包,如gcc等: yum -y install gcc gcc-c++ make glibc kernel-devel kernel-headers autoconf automake libtool glib2-devel libxml2 libx ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...