Home [SQL] Delete、Truncate、Drop Table
Post
Cancel

[SQL] Delete、Truncate、Drop Table

DeleteTruncateDrop 這幾個關鍵字都是只要刪除、清空的意思差別在此釐清一下。

  1. drop 資料表完成刪除,包含結構跟內容,如果你想要刪除資料表時可以使用。
  2. truncate 保留資料表的欄位結構,但清空裡面的資料。
  3. delete 保留資料表的欄位結構,一樣可以刪除全部資料(與truncate有一些不同)或部分符合你設定條件的資料。

Drop Table

舉例:

刪除 test 資料表,執行以後資料庫裡面將不再看到 test 資料表

1
drop table test

Delete Table

delete 比較常使用在刪除部分符合條件的資料,執行後資料庫一樣會有 test 資料表,但符合where篩選條件的資料會刪除。如下所示 test 資料表 id 欄位小於等於 500刪除掉。

1
delete from test where id <= 500

DELETE 亦可用於清空資料表,但效能方面比下面要介紹的truncate差,如下所示不加入 WHERE 篩選條件即可,清空資料表資料,如下所示使用DELETE 清空 test 資料表。

1
delete from test

如果要從資料表刪除所有資料列,請使用 TRUNCATE TABLE

Truncate Table

truncate 清除表內資料,保留資料表的結構,如下範例一樣是清空資料表。

1
truncate table test

Truncate vs. Delete

詳細比較truncatedelete清空資料。

資料表內如果有自動遞增ID(插入資料時id欄位自動加1的欄位),該欄位使用truncate 清空以後再重新插入資料將重新開始id再由1開始慢慢遞增,如果使用delete 原本最後的ID1000的話,使用delete 清空完資料以後再次插入資料,ID會由1001開始,不會重新由1開始。

清空資料後,再插入資料(假設最後id1000):
truncate 自動編號會重置(從1開始)
delete 自動編號會續編(1001開始)

可以知道的是truncate 完整釋放硬碟空間,delete 則視底層版本不同,會釋放或不會釋放硬碟空間,也就是使用Delete 如果是用在MySQL這個資料庫有可能會有兩種情況發生。

Delete vs Truncate vs Drop

This post is licensed under CC BY 4.0 by the author.