Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

資料庫表單與資料操作:用 DELETE 刪除資料的完整指南

最後更新:2026年1月16日資料庫

這篇來講如何「刪除資料」。

刪除資料用的是 DELETE 這個指令。

在所有資料操作中,刪除是最需要謹慎的。

因為刪除在資料庫中是真的消失,沒有資源回收桶可以讓你復原。

這篇文章會帶你了解 DELETE 的用法,以及刪除資料時必須注意的事項。

DELETE 的核心問題:刪哪些資料

想像一個情境:老闆跟你說「幫我刪除會員資料」。

你的直覺反應應該是:

第一,要刪哪些會員?

你應該不會想把全部會員都刪掉吧?那真的太刺激了。

所以你要確認:是要刪除哪些特定的會員?

第二,你真的要刪嗎?

資料收集不容易。

這些會員搞不好是花錢投廣告才吸引進來註冊的。

你真的要刪嗎?真的真的要刪嗎?

這不是開玩笑,很多資安嚴謹的公司,要刪資料時會要求你填特別的表單,記錄是誰刪的、刪了什麼,之後要負責。

刪資料這件事很嚴重,一定要謹慎。

在 SQL 中,刪除資料用 DELETE,指定要刪哪些資料用 WHERE。

完整的刪除語法長這樣:

DELETE FROM 表單名稱
WHERE 篩選條件
  • DELETE FROM:表示要從某張表單刪除資料
  • 表單名稱:指定要刪除哪張表單的資料
  • WHERE 篩選條件:指定要刪除哪些資料列

DELETE 一定要加 WHERE 條件

這裡要特別強調:99% 的情況下,DELETE 一定要加 WHERE 篩選條件。

為什麼?

還記得 SELECT 讀取資料時,不加 WHERE 會怎樣嗎?會把全部資料都讀出來。

同樣的道理:

  • 讀取資料不加 WHERE → 全部都讀出來
  • 更新資料不加 WHERE → 全部都更新
  • 刪除資料不加 WHERE → 全部都刪掉

全部都刪掉,就是整張表單的資料清空。

這種事情通常不會發生,如果真的遇到這個需求,請先問一下前輩,確認這是不是你真正想做的事。

刪除前先用 SELECT 確認

在真正執行 DELETE 之前,建議你做這幾件事:

第一,先用 SELECT 確認

把 DELETE 改成 SELECT,用同樣的 WHERE 條件,先把資料讀出來看一下。

確認這些資料列是不是你真正要刪的目標。

-- 先用 SELECT 確認
SELECT *
FROM 會員
WHERE 姓 = '王'

-- 確認沒問題後,再改成 DELETE
DELETE FROM 會員
WHERE 姓 = '王'

第二,做個簡單備份

如果你更謹慎一點,可以把這些資料先存到某個地方。

怎麼做?

最簡單的方式是先用 SELECT 把資料讀出來,然後複製到 Excel 或文字檔存起來。

或者,你可以用 INSERT 把這些資料複製到另一張備份表單。

-- 先建立一張備份表單,結構跟原本的一樣
-- 然後把要刪的資料複製過去
INSERT INTO 會員_備份
SELECT *
FROM 會員
WHERE 姓 = '陳' AND 名 = '大同'

這樣萬一之後需要回溯,至少你知道刪了哪些資料,可以把它們填回去。

雖然這不是最完美的備份方式,但至少在緊急情況下有個保險。

刪除特定資料

假設我們有一張「會員」表單:

ID姓名
1王小明
2李小華
3陳大同
姓王
名小明
姓李
名小華
姓陳
名大同

現在要刪除姓「陳」且名為「大同」的會員。

先用 SELECT 確認:

SELECT *
FROM 會員
WHERE 姓 = '陳' AND 名 = '大同'

確認結果:

ID姓名
3陳大同
姓陳
名大同

確認這就是要刪的資料後,再執行 DELETE:

DELETE FROM 會員
WHERE 姓 = '陳' AND 名 = '大同'

執行後,表單變成:

ID姓名
1王小明
2李小華
姓王
名小明
姓李
名小華

軟刪除(Soft Delete)

既然刪除這麼危險,有沒有辦法不真的刪資料呢?

有的,這個做法叫做「軟刪除」(Soft Delete)。

做法是這樣:在表單中多加一個欄位,例如叫 is_deleted。

當你要「刪除」某筆資料時,不是真的刪掉它,而是把 is_deleted 設成 true。

ID姓名is_deleted
1王小明false
2李小華false
3陳大同true
姓王
名小明
is_deletedfalse
姓李
名小華
is_deletedfalse
姓陳
名大同
is_deletedtrue

這樣資料還在資料庫裡,只是被標記成「已刪除」。

之後在讀取資料時,只要加上 WHERE is_deleted = false,就不會讀到這些被標記的資料。

SELECT *
FROM 會員
WHERE is_deleted = false

這樣看起來就像是資料被刪掉了,但其實還在。

軟刪除在業界非常常用。

所以當老闆叫你刪資料時,要先想一下:他是真的希望資料消失,還是只是不希望在某些地方顯示出來?

如果是後者,用軟刪除就可以了。

SQL 字串用單引號

順便提一下,在 SQL 中寫字串時,要用單引號 ',不是雙引號 "。

-- 正確:用單引號
WHERE 姓 = '王'

-- 避免:用雙引號(在某些資料庫中,雙引號是用來指定欄位名稱的)
WHERE 姓 = "王"

雖然有些資料庫兩種都能用,但為了避免混淆,養成好習慣:SQL 中的字串一律用單引號。

小結

這篇文章介紹了 DELETE 的用法和注意事項:

  • DELETE FROM 表單名稱 WHERE 篩選條件:刪除符合條件的資料列
  • 篩選條件超級重要:不加 WHERE 會刪掉全部資料
  • 刪除前先用 SELECT 確認:確保要刪的是正確的資料
  • 刪除是不可逆的:沒有資源回收桶,刪了就是真的消失
  • 軟刪除:用 is_deleted 欄位標記,而不是真的刪除資料
  • SQL 字串用單引號:養成好習慣,避免混淆

刪除資料很簡單,但也要很謹慎。

下指令前多想一下,確認清楚再執行。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • DELETE 的核心問題:刪哪些資料
  • DELETE 一定要加 WHERE 條件
  • 刪除前先用 SELECT 確認
  • 刪除特定資料
  • 軟刪除(Soft Delete)
  • SQL 字串用單引號
  • 小結