課程 20:刪除資料 (DELETE)
一、什麼是 DELETE 語句?
DELETE
語句用於從資料表中刪除現有的記錄。- 它會刪除整行記錄,而不會只刪除欄位值(如果只想清空欄位值,應該使用
UPDATE
)。 - 與
UPDATE
類似,通常會搭配WHERE
子句來指定要刪除哪些記錄。
二、DELETE 語法
DELETE FROM table_name\nWHERE condition;\n
table_name
: 要刪除資料的資料表名稱。WHERE condition
: 可選的子句,用於過濾哪些記錄將被刪除。如果省略WHERE
子句,將刪除資料表中的所有記錄(請**務必小心**使用!)。
三、刪除特定記錄
範例:刪除 id 為 3 的客戶記錄。
DELETE FROM customers\nWHERE id = 3;\n
四、刪除多個記錄
範例:刪除所有居住在 ‘高雄’ 的客戶記錄。
DELETE FROM customers\nWHERE city = '高雄';\n
五、刪除所有記錄 (無 WHERE 子句)
警告: 如果沒有 WHERE
子句,DELETE
語句將刪除資料表中的所有記錄!
DELETE FROM customers; -- 刪除 customers 表中的所有記錄\n
要注意的是,刪除所有資料也可以使用 TRUNCATE TABLE
或 DROP TABLE
,但它們與 DELETE
有區別:
DELETE
: 逐行刪除,可以回滾 (rollback),觸發觸發器 (trigger),自動增長計數器會繼續。TRUNCATE TABLE
: 快速刪除所有行,通常無法回滾,不觸發觸發器,重置自動增長計數器。DROP TABLE
: 刪除整個表格結構和所有數據。
六、SQL常見錯誤與資料損壞風險
- 忘記寫
WHERE
子句:這是最危險的錯誤,會清空整個表格。在生產環境執行刪除操作前,請務必仔細檢查WHERE
子句。 WHERE
子句條件錯誤:刪除了錯誤的記錄或沒有記錄被刪除。- 外鍵約束限制:如果刪除的記錄被其他表格的外鍵引用,可能會因為外鍵約束而失敗。
- 沒有備份:在執行重要的刪除操作前,務必進行資料備份。
七、課後小練習
- 假設有一個
products
表 (id, name, price, stock)。請寫出一個查詢,刪除 id 為 2 的商品記錄。 - 請寫出另一個查詢,刪除所有庫存 (stock) 為 0 的商品記錄。
互動練習:刪除資料模擬
客戶資料表(customers)
id | name | phone | city |
---|---|---|---|
1 | 小明 | 0912345678 | 台北 |
2 | 小美 | 0922334455 | 台中 |
3 | 小王 | 0933445566 | 高雄 |
4 | 小陳 | 0955667788 | 台北 |
5 | 小李 | 0966778899 | 台中 |