DELETE FROM 語法

DELETE FROM $表名稱

但這樣寫會有個問題,一般較少這樣寫...原因是 「會刪除全部的 row 欄位」

DELETE FROM WHERE 語法

但要注意,一般不會如上述這樣寫,因為缺少了「WHERE」來篩選目標對象,會導致表中的所有 row 紀錄資料都將被刪除!

一般還是會如下加上 WHERE 來指定特定目標刪除 row 資料

DELETE FROM $表名稱
WHERE $目標對象的條件;

刪除指定的使用者資料

假設我們有一張 users 資料表如下:

id name email
1 Alice alice@mail.com
2 Bob bob@example.com
3 Charlie charlie@mail.com

現在我們想要刪除 id 為 2 的使用者:

DELETE FROM users
WHERE id = 2;

這樣只會刪除 Bob 那一筆資料,其它使用者不會受到影響。

若是條件寫不精準

假設這樣寫:

DELETE FROM users
WHERE name = 'Bob';

如果資料表裡有多個名字都是 Bob 的使用者,就會一口氣刪掉多筆資料...,因此,條件越精確越好。

使用 IN 刪除多筆指定資料

當要一次刪除多筆特定 id 的資料時,可以使用 IN

DELETE FROM users
WHERE id IN (3, 5, 7);

這樣能夠有效率地一次刪除多筆資料,而不需要寫很多次 OR 或多行 DELETE

搭配 LIMIT刪一筆

有時候只想刪除一筆符合條件的資料(例如:清掉最舊的錯誤紀錄),可以加上 LIMIT 來限制刪除數量:

DELETE FROM logs
WHERE status = 'error'
LIMIT 1;
注意:並不是所有資料庫都支援 DELETE ... LIMIT

多一層保險:用 TRANSACTION

在處理高風險刪除操作時,若資料庫支援「交易」TRANSACTION,可以善用它來避免手滑的情況:

BEGIN;

DELETE FROM users
WHERE email LIKE '%@spam.com';

-- 確認沒問題後
COMMIT;

-- 如果發現條件錯了
ROLLBACK;