你想刪除資料時,只要用 DELETE FROM 表格名稱 WHERE 條件
就可以。很多人會忘記加WHERE,這樣一不小心就會把整個表的資料都刪光。下面這些例子可以幫你理解:
你在做SQL刪除時,最常見的語法就是這樣:
DELETE FROM 表格名稱 WHERE 條件;
這個語法很簡單,卻很有威力。你只要指定表格名稱,然後用WHERE條件告訴資料庫要刪除哪些資料。技術文件裡也有詳細說明這個結構,像是「DELETE FROM table_name WHERE column_name operator value;」。每個部分都有它的意義:
DELETE FROM
:這是告訴資料庫你要刪除資料。表格名稱
:你要從哪個表格刪除資料。WHERE 條件
:你要刪除哪些資料,這裡一定要小心。你只能用DELETE刪除整列資料,不能只刪除某一個欄位。如果你想只清空某個欄位,得用UPDATE語法。
小提醒:技術社群和官方文件也會提到,像在SQL Server裡,DELETE語法甚至可以用在XML文件,刪除特定節點。不過大多數時候,你會用在一般資料表。
WHERE子句是SQL刪除裡最重要的部分。你一定要用它來指定條件,否則資料庫會把整個表的資料都刪掉。這裡有幾個重點:
DELETE FROM Websites WHERE name='Facebook' AND country='USA';
有些資料庫(像MySQL)還有安全機制。例如,sql_safe_updates
參數可以防止你不小心執行沒有WHERE條件的SQL刪除。這樣可以大大降低誤刪的風險。
你在寫SQL刪除時,最常見的錯誤就是忘記加WHERE。這會讓你一口氣刪掉整個表的資料,資料就救不回來了。還有其他常見錯誤:
你可以參考技術社群的教學文章,裡面會提醒你要注意外部關聯鍵的約束,還有JOIN語法的應用。這些都能幫你避免在複雜資料庫裡發生意外。
小心:SQL刪除是不可逆的操作。每次執行前,請再三檢查你的WHERE條件,並且記得備份資料。
你想只刪掉一筆資料嗎?這很簡單。假設你有一個叫做 students
的表格,裡面有學生的資料。你只想刪掉學號是 1001 的那一筆。你可以這樣寫:
DELETE FROM students WHERE student_id = 1001;
這個指令會找到 student_id
等於 1001 的那一行,然後把它從資料表裡移除。你不用擔心其他學生的資料會被影響,只會動到這一筆。
小提醒:每次執行SQL刪除時,請再三檢查你的WHERE條件,確保只刪掉你想要的資料。
有時候,你會想一次刪掉好幾筆資料。比如你想把所有畢業年份是 2020 的學生資料都刪除。你可以這樣做:
DELETE FROM students WHERE graduation_year = 2020;
這個指令會找出所有 graduation_year
等於 2020 的學生,然後一次把他們的資料都刪掉。這樣你不用一筆一筆慢慢刪,效率很高。
你也可以用IN語法,像這樣:
DELETE FROM students WHERE student_id IN (1002, 1003, 1004);
這樣就能同時刪掉多個指定學號的學生。
你可能會想知道,執行SQL刪除前後,資料表到底有什麼變化?我們來看一個簡單的例子。假設你的 students
表格原本長這樣:
student_id | name | graduation_year |
---|---|---|
1001 | 小明 | 2020 |
1002 | 小華 | 2021 |
1003 | 小美 | 2020 |
1004 | 小強 | 2022 |
你執行這個指令:
DELETE FROM students WHERE graduation_year = 2020;
執行後,資料表會變成:
student_id | name | graduation_year |
---|---|---|
1002 | 小華 | 2021 |
1004 | 小強 | 2022 |
你可以很清楚看到,畢業年份是2020的學生(小明和小美)都被刪除了。
你可以利用這些工具,輕鬆追蹤SQL刪除前後的資料表變化,無論是用來稽核還是做趨勢分析都很方便。
你有時候會遇到需要根據多個表格的關聯來刪除資料。這時候,你可以用JOIN來幫忙。舉個例子,你有一個orders
表和一個customers
表。你想刪掉所有來自特定城市的客戶訂單,可以這樣寫:
DELETE o
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE c.city = 'Taipei';
這樣,只有住在台北的客戶訂單會被刪除。JOIN讓你可以根據不同表格的條件,精準找到要刪的資料。
小提醒:不是每個資料庫都支援JOIN刪除,像MySQL可以,SQL Server語法會不一樣。記得查一下你用的資料庫支援哪些語法。
你也可以用子查詢來做條件刪除。假設你想刪掉所有沒有訂單的客戶,可以這樣寫:
DELETE FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);
這個指令會先找出所有有訂單的客戶,再把沒有出現在這個名單裡的客戶刪掉。子查詢讓你可以先篩選出一組資料,再根據這組資料來決定要刪哪些資料。
有時候,你刪掉一筆資料時,會希望相關的資料也自動被刪除。這時候你可以用ON DELETE CASCADE。舉個例子,你有一本書(Book),這本書有評論(Review)、價格優惠(PriceOffer)、作者(BookAuthor)等相關資料。當你刪掉這本書時,這些相關資料也會自動被刪除,不用你一筆一筆處理。
ON DELETE CASCADE讓你不用擔心資料遺漏或不一致,特別適合有多層關聯的資料表。你只要設好規則,資料庫就會自動幫你把相關資料一起清掉,省時又安全!
你在寫SQL刪除時,最怕的就是一不小心把整個表的資料都刪掉。只要漏掉WHERE條件,資料庫就會把所有資料清空。這種錯誤很常見,很多人都踩過這個坑。你可以這樣檢查:
小提醒:永遠不要直接執行沒有WHERE的SQL刪除,這樣很危險!
你每次要刪資料前,最好先備份。這樣萬一刪錯,還有機會救回來。備份的方法有很多種:
你可以根據自己的需求選一種方式。只要有備份,就不用怕誤刪。
建議你把備份當成習慣,這樣資料才有保障。
SQL刪除是一種不可逆的操作。你一旦執行,資料就真的不見了。資料庫不會自動幫你保留歷史紀錄。你如果沒有備份,想還原就很困難。你可以這樣做:
記住:SQL刪除不是回收筒,刪掉就沒辦法還原。每次操作都要小心!
你常常會看到DELETE和TRUNCATE這兩個指令。它們都能刪除資料,但用法和效果不一樣。你可以參考下表:
指令 | 刪除方式 | 是否可加WHERE | 是否可回復 | 速度 |
---|---|---|---|---|
DELETE | 一筆一筆刪除 | 可以 | 有機會 | 較慢 |
TRUNCATE | 整個表一次清空 | 不行 | 幾乎不能 | 很快 |
小提醒:TRUNCATE不能加WHERE,執行後資料很難救回來,要特別小心!
DROP和DELETE差更多。你用DELETE是刪資料,表格還在。你用DROP,整個表格都會被移除,連結構都不見。
DROP很危險,除非你真的不再需要這個表,否則不要亂用!
你用DELETE刪資料時,Auto_Increment欄位(像自動編號)不會重設。新資料還是會接著原本的編號。TRUNCATE則會把Auto_Increment重設回1。
記住:DELETE不會影響Auto_Increment,TRUNCATE才會重設!
每次你要做SQL刪除,記得先檢查WHERE條件,還有備份資料。你可以多做幾次測試,熟悉語法,這樣操作起來會更安心。根據不同需求,選對刪除指令,才能避免資料無法還原的困擾。
小提醒:資料安全最重要,千萬別心急!
你沒辦法用 DELETE 只刪一個欄位。DELETE 會把整列刪掉。如果只想清空欄位,請用 UPDATE。
你如果沒備份,資料就救不回來。建議你平常一定要先備份,這樣才有機會還原。
DELETE 比較安全。你可以加 WHERE 控制範圍。TRUNCATE 一次清空整個表,沒辦法選資料。
你用 DELETE 刪資料,Auto_Increment 不會重設。新資料還是會接著原本的編號。
你可以!只要 WHERE 條件符合多筆資料,DELETE 就會一次刪掉全部符合的資料。
免費資源下載