詳解MySQL中DROP,TRUNCATE 和DELETE的差別完成mysql從零開端。本站提示廣大學習愛好者:(詳解MySQL中DROP,TRUNCATE 和DELETE的差別完成mysql從零開端)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解MySQL中DROP,TRUNCATE 和DELETE的差別完成mysql從零開端正文
分歧點:
1. truncate和 delete只刪除數據不刪除表的構造(界說)
drop語句將刪除表的構造被依附的束縛(constrain),觸發器(trigger),索引(index); 依附於該表的
存儲進程/函數將保存,然則變成invalid狀況.
2.delete語句是dml,這個操作會放到rollback segement中,事務提交以後才失效;假如有響應的trigger,
履行的時刻將被觸發.
truncate,drop是ddl, 操作立刻失效,原數據不放到rollback segment中,不克不及回滾. 操作不觸發
trigger.
3.delete語句不影響表所占用的extent, 高水線(high watermark)堅持原地位不動
明顯drop語句將表所占用的空間全體釋放
truncate 語句缺省情形下見空間釋放到 minextents個 extent,除非應用reuse storage; truncate
會將高水線復位(回到最開端).
4.速度,普通來講: drop> truncate > delete
5.平安性:當心應用drop 和truncate,特別沒有備份的時刻.不然哭都來不及.
應用上,想刪除部門數據行用delete,留意帶上where子句. 回滾段要足夠年夜.
想刪除表,固然用drop
想保存表而將一切數據刪除. 假如和事務有關,用truncate便可. 假如和事務有關,或許想觸發trigger,還
是用delete.
假如是整頓表外部的碎片,可以用truncate跟上reuse stroage,再從新導入/拔出數據/
現實運用:
delete from table; //刪除一切數據
truncate table; //將auto_increatement調制從0開端,現實就是從1開端