SQL DELETE FROM

DELETE FROM 敘述句 (SQL DELETE FROM Statement)

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

DELETE FROM 語法 (SQL DELETE FROM Syntax)

DELETE FROM table_name
WHERE column_name operator value;

WHERE 條件式記得要加哦!不然 “全部的” 資料都會刪除了。

DELETE FROM 敘述句用法 (Example)

假設我們想從下面的 customers 資料表中刪除顧客王二的資料:

C_IdNameCityAddressPhone
1張一台北市XX路100號02-12345678
2王二新竹縣YY路200號03-12345678
3李三高雄縣ZZ路300號07-12345678

我們可以使用以下的 DELETE FROM 敘述句:

DELETE FROM customers WHERE Name='王二';

刪除後的資料表現在變成:

C_IdNameCityAddressPhone
1張一台北市XX路100號02-12345678
3李三高雄縣ZZ路300號07-12345678

一次刪除資料表中所有的資料

我們還可以這樣一次刪除某資料表中所有的資料:

DELETE FROM table_name;

或者:

DELETE * FROM table_name;

TRUNCATE TABLE 與 DELETE FROM 的比較

除了 DELETE FROM 之外,SQL 還提供了 TRUNCATE TABLE 語句來刪除資料表中的所有資料。雖然兩者都能達到清空資料的效果,但在運作方式和使用場景上有很大的不同。

TRUNCATE TABLE 語法 (TRUNCATE TABLE Syntax)

TRUNCATE TABLE table_name;

TRUNCATE TABLE 會一次移除資料表中的所有資料列,並且無法使用 WHERE 條件來篩選要刪除的資料。

TRUNCATE TABLE 用法 (Example)

假設我們想要清空 customers 資料表中的所有資料:

TRUNCATE TABLE customers;

執行後,customers 資料表的所有資料都會被移除,但資料表本身的結構(欄位定義、索引等)會被保留。

DELETE FROM 與 TRUNCATE TABLE 的差異

比較項目DELETE FROMTRUNCATE TABLE
刪除範圍可搭配 WHERE 條件刪除部分資料只能刪除全部資料
執行速度較慢(逐筆刪除)較快(直接釋放資料頁)
交易記錄每筆刪除都會寫入交易記錄只記錄頁面釋放的操作
ROLLBACK支援(可復原)部分資料庫不支援
觸發器 (Trigger)會觸發 DELETE 觸發器不會觸發觸發器
自動編號重置不會重置 AUTO_INCREMENT會重置 AUTO_INCREMENT

簡單來說,如果你只需要刪除符合特定條件的資料,使用 DELETE FROM;如果你想要快速清空整個資料表的資料並重置自動編號,使用 TRUNCATE TABLE 會更有效率。

延伸閱讀

留言功能已關閉。