首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 刪除資料表與清空資料表資料:DROP、DELETE、TRUNCATE 差異完整解析

     編輯:關於SqlServer

「刪除資料表」與「刪除資料表資料」是兩個完全不同的操作。前者移除資料表結構與中繼資料,後者僅清除資料列保留結構。本文詳細比較 DROP TABLE、DELETE、TRUNCATE TABLE 三指令的語法、行為差異與適用場景。

一、刪除資料表結構:DROP TABLE

DROP TABLE <資料表名稱>;
  • 徹底移除資料表定義、資料、索引、約束、觸發器、權限等所有中繼資料。
  • 操作不可回復(除非有備份),執行前請三思。

二、刪除資料表資料:DELETE vs TRUNCATE

特性DELETETRUNCATE TABLE
語法DELETE FROM <表> [WHERE 條件]TRUNCATE TABLE <表>
篩選條件支援 WHERE 子句,可刪除特定列不支援,僅能清空整張表
觸發器啟動 AFTER DELETE 觸發器不啟動觸發器
識別欄位 (IDENTITY)保留當前種子值,下一筆接續遞增重置為種子初始值(預設 1)
交易記錄逐列記錄,大量刪除記錄量大、較慢僅記錄頁面釋放,極速、記錄量極小
鎖定粒度列鎖定 (可升級為表鎖定)表鎖定 / 頁面鎖定
權限需求DELETE 權限ALTER 權限 (需 ddladmin 或 db_owner)
外來鍵參考若有 FK 參考則失敗若有 FK 參考則失敗 (需先移除 FK)
回復能力完整記錄,可點對點恢復最小記錄,無法單獨恢復特定列

三、實戰選擇指南

  1. 需保留部分資料 / 觸發稽核觸發器 / 刪除少量資料 → DELETE。
  2. 清空整張表、重置流水號、追求極致效能、無 FK 參考 → TRUNCATE TABLE。
  3. 永久移除不再使用的資料表結構 → DROP TABLE。

四、進階補充

  • TRUNCATE TABLE 於 SQL Server 2016+ 支援 WITH (PARTITIONS (1, 3)) 截斷特定分區。
  • 大量刪除資料建議分批 DELETE TOP (10000) ... 避免交易記錄暴漲與長時間鎖定。
  • DROP TABLE 前建議先 IF EXISTS 判斷:DROP TABLE IF EXISTS dbo.TempData; (SQL Server 2016+)。

理解三者差異,才能在資料維護、效能調校、架構重構中做出正確選擇,避免誤操作導致資料遺失或服務中斷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved