程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Delete/truncate/drop區別

Delete/truncate/drop區別

編輯:MySQL綜合教程

Delete/truncate/drop區別   1.delete/truncate 只刪除數據不刪除表,索引的結構。 drop 將刪除表的結構及依賴的 index/constrain/trigger,依賴於該表的 procedure/function 將保留,但是變為 invalid 狀態;   2. delete 是 dml語句,寫 rollback segement,可以回滾,但是速度慢,事務提交之後才生效。一次性大批量數據的 delete 可能導致回滾段急劇擴展從而影響到數據庫,慎用,觸發 trigger。 truncate/drop 是 ddl,隱式提交,不寫 rollback segment,不能回滾,速度快。   3. delete 不影響表所占用的 extent,HWM 保持原位置不動,即使刪除的是最靠近 HWM 的數據。delete 其實也可以釋放空間,但是不降低 HWM,delete 後 block 的空閒空間達到 pct_used,就可以重用。 truncate 缺省情況下將空間(表和索引)釋放到 minextents 個 extent,除非使用 reuse storage。truncate 會將高水線復位(回到最開始)。 drop 將表所占用的空間全部釋放,segment 不存在,無所謂 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 一個帶有 enable 外鍵的表,不管表裡有沒有數據,如果要 truncate,首先要 disable 外鍵或者刪除外鍵(drop 外鍵的表肯定是刪除了外鍵)。不能 drop 一個帶有 enable 外鍵的表,不管表裡有沒有數據,如果要 drop,首先要刪除外鍵,或者直接用 drop table TABLE_NAME cascade constraints; 級聯刪除外鍵。 delete 可以。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved