課程 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 | 台中 |
