1. 程式人生 > 其它 >DROP TABLE、TRUNCATE TABLE和DELETE的區別

DROP TABLE、TRUNCATE TABLE和DELETE的區別

相同點

TRUNCATETABLEDELETE都可以刪除整個資料庫表的記錄

不同點

  1. DELETE DML語言 可以回退 可以有條件的刪除DELETE FROM 表名 WHERE 條件

  2. TRUNCATE TABLE DDL語言 無法回退 預設所有的表內容都刪除 刪除速度比delete快TRUNCATE TABLE 表名

  3. DROP TABLE 用於刪除表(表的結構、屬性以及索引也會被刪除);DROP TABLE 表名

原理

DDL(Data Definition Language)資料定義語言,DML(Data Manipulation Language)資料操作語言。

  • TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而TRUNCATE則不會被撤銷。
  • TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
  • TRUNCATE將重新設定高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作後的表比Delete操作後的表要快得多。
  • TRUNCATE不能觸發任何Delete觸發器。
  • 當表被清空後表和表的索引講重新設定成初始大小,而delete則不能。
  • 不能清空父表。

優化

在資料庫裡,使用delete刪除資料以後,資料庫的儲存容量不會減少,而且使用delete刪除某個表的資料以後,查詢這張表的速度和刪除之前一樣,不會發生變化。 因為資料庫有一個HWM高水位,它是oracle的一個表使用空間最高水位線。當插入了資料以後,高水位線就會上漲,但是如果你採用delete語句刪除資料的話,資料雖然被刪除了,但是高水位線卻沒有降低,還是你剛才刪除資料以前那麼高的水位。除非使用truncate刪除資料。那麼,這條高水位線在日常的增刪操作中只會上漲,不會下跌,所以資料庫容量也只會上升,不會下降。而使用select語句查詢資料時,資料庫會掃描高水位線以下的資料塊,因為高水位線沒有變化,所以掃描的時間不會減少,所以才會出現使用delete刪除資料以後,查詢的速度還是和delete以前一樣。