資料操作語言(DML)中的刪除與更新是資料庫日常維護的核心。本文系統整理 DELETE、TRUNCATE 的差異、UPDATE 進階用法(含 REPLACE 函數),助您精準、高效地維護資料。
DELETE FROM TableName WHERE Id = 'xx';
WHERE 刪除特定列。ON DELETE 觸發器。TRUNCATE TABLE TableName;
ALTER TABLE 權限;被外鍵參考時不可用。| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 支援 WHERE | 是 | 否 |
| 觸發觸發器 | 是 | 否 |
| 日誌記錄量 | 逐列(大) | 頁面級(極小) |
| 重設 Identity 種子 | 否 | 是 |
| 執行速度 | 較慢 | 極快 |
| 可回滾 | 是 | 是(在交易中) |
UPDATE TableName
SET ColumnName = 'NewValue'
WHERE ConditionColumn = 'ConditionValue';
需求:將年齡 > 19 之使用者的姓名中「星」替換為「★」。
UPDATE TableName
SET Name = REPLACE(Name, '星', '★')
WHERE Age > 19;
REPLACE(column, old_str, new_str) 會替換**所有**出現的 old_str。COLLATE 指定校對規則。UPDATE t
SET t.Status = s.NewStatus
FROM TargetTable t
JOIN SourceTable s ON t.Id = s.RefId
WHERE s.IsValid = 1;
UPDATE Products
SET Price = CASE
WHEN Category = 'A' THEN Price * 1.1
WHEN Category = 'B' THEN Price * 0.9
ELSE Price
END;
TRUNCATE(清空全表)或分批 DELETE TOP (N) 避免日誌暴增。DELETE 可在交易中 ROLLBACK;TRUNCATE 亦可在顯式交易中回滾,但交易結束後無法透過日誌單獨還原單列。SELECT INTO BackupTable 保留快照。WHERE 條件欄位務必加索引。熟練掌握刪除與更新的細節差異,能讓您在資料維護、ETL 流程、錯誤修復等場景中游刃有餘,守護資料完整與效能。