2. delete 是 dml,寫(xiě) rollback segement,可回滾,速度慢,事務(wù)提交之后才生效。在 9i 滿(mǎn)足 undo_retention 條件下可使用 flashback。一次性大批量數據的 delete 可能導致回滾段急劇擴展從而影響到數據庫,慎用。觸發(fā) trigger。 truncate/drop 是 ddl,隱式提交,不寫(xiě) rollback segment,不能回滾,速度快。9i 不能使用 flashback。不觸發(fā) trigger;
3. delete 不影響表所占用的 extent,HWM 保持原位置不動(dòng),即使刪除的是最靠近 HWM 的數據。delete 其實(shí)也可以釋放空間,但是不降低 HWM,delete 后 block 的空閑空間達到 pct_used,就可以重用。 truncate 缺省情況下將空間(表和索引)釋放到 minextents 個(gè) extent,除非使用 reuse storage。truncate 會(huì )將高水線(xiàn)復位(回到最開(kāi)始)。 drop 將表所占用的空間全部釋放,segment 不存在,無(wú)所謂 HWM 的概念;
4. truncate/drop 的對象必須是本模式下的,或者被授予 drop any table 的權限,但 drop any table 權限不能 truncate/drop sys 的表。 delete 的對象必須是本模式下的,或者被授予 delete on SCHEMA.table 或 delete any table 的權限,但 delete any table 權限不能 delete sys 的表;
5. 不能 truncate 一個(gè)帶有 enable 外鍵的表,不管表里有沒(méi)有數據,如果要 truncate,首先要 disable 外鍵或者刪除外鍵(drop 外鍵的表肯定是刪除了外鍵)。不能 drop 一個(gè)帶有 enable 外鍵的表,不管表里有沒(méi)有數據,如果要 drop,首先要刪除外鍵,或者直接用 drop table TABLE_NAME cascade constraints; 級聯(lián)刪除外鍵。 delete 可以。
聯(lián)系客服