1. 程式人生 > >《Oracle PL/SQL 完全自學手冊》讀書筆記 第5章 資料的增、刪、改-- 5.3.4 TRUNCATE與DELETE的區別

《Oracle PL/SQL 完全自學手冊》讀書筆記 第5章 資料的增、刪、改-- 5.3.4 TRUNCATE與DELETE的區別

TRUNCATE的作用是清空一個表格,在刪除資料方面,它與DELETE有如下一些區別:

在資料處理功能上,TRUNCATE是清空一個表的所有內容,它相當於DELETE FROM TABLE_NAME

DELETE是DML操作,而TRUNCATE是DDL操作。因此,用DELETE刪除整個表中的資料時,會產生大量的ROLLBACK,佔用很多的ROLLBACK SEGMENTS,而TRUNCATE則不會

在記憶體中,用DELETE刪除資料,表空間中被刪除資料的表佔用的空間還在,便於以後使用,另外它還是“假相”的刪除,相當於在Windows中按【Delete】鍵刪除資料把資料放到回收站中,還可以恢復。當然,如果這個時候重新啟動系統(OS或者RDBMS),它也就不能恢復了。

而在記憶體中使用TRUNCATE清除資料,表空間中被刪除資料的表佔用的空間會被立即釋放,相當於Windows中按【Shift+Delete】組合鍵刪除資料,不能夠恢復。

TRUNCATE調整高水位線(HIGH WATER MARK,HWM),而DELETE不調整;使用TRUNCATE之後,TABLE的HWM退回到INITIAL和NEXT的位置(預設),DELETE則不可以。

提示:

HWM一般是相對一個表而言的,當一個表有資料不斷插入時,HWM值不斷增高,對那些全表掃描的SELECT查詢是以HWM為終點的,即使表中可能只有一行記錄。HWM是表的空間曾經擴充到的值。

TRUNCATE只能對應於TABLE,DELETE可以對應於TABLE,VIEW,SYNONYM

TRUNCATE TABLE的物件必須是本模式下的,或者當前使用者被授予DROP ANY TABLE的許可權;而DELETE的物件必須是本模式下的,或當前使用者被授予DELETE ON SCHEMATABLE或DELETE ANY TABLE的許可權

在外層中,執行TRUNCATE或者DELETE操作後,其佔用的空間都將被釋放。

TRUNCATE和DELETE只刪除資料,而DROP則刪除整個表(結構和資料)

例如,下面語句使用TRUNCATE 截斷 Woods表

SQL>TRUNCATE TABLE Woods;

執行結果如下所示:

表被截斷

注意:DELETE語句的操作可以回滾,但TRUNCATE語句的操作不能回滾。