DELETE FROM 語法
DELETE FROM $表名稱
但這樣寫會有個問題,一般較少這樣寫...原因是 「會刪除全部的 row 欄位」
DELETE FROM WHERE 語法
但要注意,一般不會如上述這樣寫,因為缺少了「WHERE」來篩選目標對象,會導致表中的所有 row 紀錄資料都將被刪除!
一般還是會如下加上 WHERE 來指定特定目標刪除 row 資料
DELETE FROM $表名稱
WHERE $目標對象的條件;
刪除指定的使用者資料
假設我們有一張 users
資料表如下:
id | name | |
---|---|---|
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;