Delete vs Truncate vs Drop

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

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

舉例:

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

drop table animals;

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

delete from animals where id <= 500;
DELETE 亦可用於清空資料表,但效能方面比下面要介紹的truncate差,如下所示不加入 WHERE 篩選條件即可,清空資料表資料,如好所示使用DELETE 清空 animals 資料表。
delete from animals;

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

truncate table animals; 

詳細比較truncatedelete清空資料。

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

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


發佈留言