1. 程式人生 > >oracle中刪除語句delete,truncate,drop的幾種方式區別

oracle中刪除語句delete,truncate,drop的幾種方式區別

我們都知道oracle中經常用到的刪除語句主要有三種,分別是delete,truncate,drop三種。這裡總結下它們的區別:

相同點:1、truncate和不帶where字句的delete以及drop都會刪除表內資料2、truncate和drop都是ddl語句(資料定義語句),執行後會自動提交。不同點:1、truncate和delete都不刪除表結構,只刪除表資料。drop語句會將表結構、被依賴的關係、觸發器、索引都刪除,保留依賴於該表的儲存過程和函式,但是變為invalid狀態。2、delete是dml(資料庫操作語言),這個操作會放到rollback segment中,會記錄日誌,可以通過回滾操作撤銷刪除的資料,必須通過提交才會真的刪除資料。如果有相應的觸發器trigger,則會觸發。truncate、drop都是ddl(資料庫定義語言),操作不能回滾,不會記錄到日誌中。且不會觸發trigger。
3、delete不影響表佔用的表空間extent,高水線(high watermark)保持不動,即刪除內容後,在插入別的語句時,表中的開始位置為刪除前的最高位置。如刪除前表中有三條資料,刪除後插入新資料時,會從第四條開始插入。drop 將表所佔用的表空間全部釋放。truncate語句預設情況下會將表空間釋放到最小表空間minextents個extents,除非使用reuse storage;truncate語句會將高水位線復位。4、速度上,一般來說drop>truncate >delete。