1. 程式人生 > 其它 >delete、truncate、drop的區別

delete、truncate、drop的區別

delete:只刪除資料,不刪除結構。刪除的資料儲存在系統回滾段中,可以回滾。不會自動提交事務。

在InnoDB中,delete不會真的把資料刪除,mysql實際上只是給刪除的資料打了個標記為已刪除,因此delete刪除表中資料時,表文件在磁碟上所佔用空間不會變小,儲存空間不會被釋放,只是把刪除的資料行設定為不可見。下次插入資料時,可以重用這部分空間。

刪除全表資料,對於MyISAM會立刻釋放磁碟空間,InnoDB不會釋放磁碟空間。帶條件的刪除,不管是InnoDB還是MyISAM都不會釋放磁碟空間。delete操作以後,使用optimize table table_name會立刻釋放磁碟空間。

delete操作時一行一行執行刪除的,並同時記錄該行的刪除操作日誌。

truncate:只刪除資料,不刪除結構。刪除的資料操作立即生效,立刻釋放磁碟空間,不可以回滾。自動提交事務。

truncate會重置自增的值為1,delete不會,但重啟後會被置為1。

drop:刪除表結構、約束、觸發器、索引。依賴該表的儲存過程和函式會保留,狀態變為invalid。刪除資料立即生效,立刻釋放表空間,不能回滾。

速度:drop>truncate>delete