delete、truncate、drop的區別
阿新 • • 發佈:2021-09-07
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