drop,truncate與delete的差別。本站提示廣大學習愛好者:(drop,truncate與delete的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是drop,truncate與delete的差別正文
留意:這裡說的delete是指不帶where子句的delete語句
雷同點
truncate和不帶where子句的delete, 和drop都邑刪除表內的數據
分歧點:
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,再從新導入/拔出數據
淺顯的講:
在現實運用中,三者的差別是明白的。
當你不再須要該表時, 用 drop;
當你仍要保存該表,但要刪除一切記載時, 用 truncate;
當你要刪除部門記載時(always with a WHERE clause), 用 delete.