DELETE 刪除資料
DELETE 用來刪除資料表中的資料。
語法
DELETE FROM table_name
WHERE condition;
務必加上 WHERE 條件!否則會刪除資料表中的所有資料。
刪除指定資料
假設有一個 customers 資料表:
| id | name | city |
|---|---|---|
| 1 | 張一 | 台北 |
| 2 | 王二 | 高雄 |
| 3 | 李三 | 台中 |
刪除 id 為 2 的客戶:
DELETE FROM customers WHERE id = 2;
結果:
| id | name | city |
|---|---|---|
| 1 | 張一 | 台北 |
| 3 | 李三 | 台中 |
刪除符合條件的多筆資料
-- 刪除所有高雄的客戶
DELETE FROM customers WHERE city = '高雄';
-- 刪除 30 天前的訂單
DELETE FROM orders WHERE order_date < DATE_SUB(NOW(), INTERVAL 30 DAY);
刪除所有資料
刪除資料表中的所有資料(資料表結構保留):
DELETE FROM table_name;
如果要清空整個資料表,建議使用 TRUNCATE,效能更好:
TRUNCATE TABLE table_name;
DELETE 與 TRUNCATE 比較
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 可指定條件 | ✓ | ✗ |
| 可以 ROLLBACK | ✓ | 通常不行 |
| 執行速度 | 較慢 | 較快 |
| 觸發 Trigger | ✓ | ✗ |
| 重設 AUTO_INCREMENT | ✗ | ✓ |
安全提醒
在執行 DELETE 之前,建議:
- 先用 SELECT 確認會刪除哪些資料:
SELECT * FROM customers WHERE city = '高雄';
- 使用 Transaction 包起來:
BEGIN TRANSACTION;
DELETE FROM customers WHERE city = '高雄';
-- 確認無誤後
COMMIT;
-- 或取消
-- ROLLBACK;