DELETE 刪除資料

DELETE 用來刪除資料表中的資料。

語法

DELETE FROM table_name
WHERE condition;
務必加上 WHERE 條件!否則會刪除資料表中的所有資料。

刪除指定資料

假設有一個 customers 資料表:

idnamecity
1張一台北
2王二高雄
3李三台中

刪除 id 為 2 的客戶:

DELETE FROM customers WHERE id = 2;

結果:

idnamecity
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 比較

特性DELETETRUNCATE
可指定條件
可以 ROLLBACK通常不行
執行速度較慢較快
觸發 Trigger
重設 AUTO_INCREMENT

安全提醒

在執行 DELETE 之前,建議:

  1. 先用 SELECT 確認會刪除哪些資料:
SELECT * FROM customers WHERE city = '高雄';
  1. 使用 Transaction 包起來:
BEGIN TRANSACTION;
DELETE FROM customers WHERE city = '高雄';
-- 確認無誤後
COMMIT;
-- 或取消
-- ROLLBACK;