在資料表操作中,常用的SQL包括drop
、truncate
和delete
,它們都與清空或刪除資料相關,但各有不同。
- drop:資料表完成刪除,包含結構跟內容,如果你不想要資料表時可以使用。
- truncate:保留資料表的欄位結構,但清空裡面的資料。
- delete:保留資料表的欄位結構,與
truncate
一樣可以刪除全部資料或只刪除符合你設定的篩選條件資料。
drop
刪除 animals 資料表,執行以後資料庫裡面將不再看到animals資料表。
drop table animals;
delete
比較常使用在刪除部分符合條件的資料,執行後資料庫一樣會有animals 資料表,但符合where篩選條件的資料會刪除。如下所示animals 資料表 id 欄位小於等於 500刪除掉。
delete from animals where id <= 500;
DELETE 亦可用於清空資料表,但效能方面比下面要介紹的
truncate
差,如下所示不加入 WHERE 篩選條件,即可清空資料表資料。
delete from animals;
truncate
清除資料表內資料,保留資料表的結構,如下範例一樣是清空資料表。
truncate table animals;
詳細比較truncate、delete清空資料。
使用truncate清空資料後,再插入資料,ID會重新從1開始遞增;而使用delete則會繼續原有的ID序列。此外,truncate會完整釋放硬碟空間,而delete則視不同資料庫系統而定,可能會或可能不會釋放硬碟空間。
資料表內如果有自動遞增ID(插入資料時id欄位自動加1的欄位),該欄位使用truncate 清空以後再重新插入資料,將重新開始id再由1開始遞增。
如果使用delete 原本最後的ID是1000的話,使用delete 清空完資料以後再次插入資料,ID會由1001開始,不會重新由1開始。
可以知道的是truncate 完整釋放硬碟空間,delete 則視底層版本不同,會釋放或不會釋放硬碟空間,也就是使用Delete 如果是用在MySQL這個資料庫有可能會有兩種情況發生。