Truncate table 清除表內容

2021-08-27 10:11:37 字數 1356 閱讀 2991

truncate table

刪除表中的所有行,而不記錄單個行刪除操作。truncate table 與沒有 where 子句的 delete 語句類似;但是,truncate table 速度更快,使用的系統資源和事務日誌資源更少。

語法[ ]

table_name

[ ; ]

引數database_name

資料庫的名稱。

schema_name

表所屬架構的名稱。

table_name

要截斷的表的名稱,或要刪除其全部行的表的名稱。

備註與 delete 語句相比,truncate table 具有以下優點:

所用的事務日誌空間較少。

delete 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄乙個項。truncate table 通過釋放用於儲存表資料的資料頁來刪除資料,並且在事務日誌中只記錄頁釋放。

使用的鎖通常較少。

當使用行鎖執行 delete 語句時,將鎖定表中各行以便刪除。truncate table 始終鎖定表和頁,而不是鎖定各行。

如無例外,在表中不會留有任何頁。

執行 delete 語句後,表仍會包含空頁。例如,必須至少使用乙個排他 (lck_m_x) 表鎖,才能釋放堆中的空表。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對於索引,刪除操作會留下一些空頁,儘管這些頁會通過後台清除程序迅速釋放。

truncate table 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。若要刪除表定義及其資料,請使用 drop table 語句。

如果表包含標識列,該列的計數器重置為該列定義的種子值。如果未定義種子,則使用預設值 1。若要保留標識計數器,請使用 delete。

限制不能對以下表使用 truncate table:

由 foreign key 約束引用的表。(您可以截斷具有引用自身的外來鍵的表。)

參與索引檢視的表。

通過使用事務複製或合併複製發布的表。

對於具有以上乙個或多個特徵的表,請使用 delete 語句。

truncate table 不能啟用觸發器,因為該操作不記錄各個行刪除。

示例:use adventureworks;

goselect count(*) as beforetruncatecount

from humanresources.jobcandidate;

gotruncate table humanresources.jobcandidate;

goselect count(*) as aftertruncatecount

from humanresources.jobcandidate;

go

TRUNCATE TABLE 清除表資料

刪除表中的所有行,而不記錄單個行刪除操作。語法truncate table name 引數name 是要截斷的表的名稱或要刪除其全部行的表的名稱。注釋truncate table 在功能上與不帶 where 子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比...

Truncate table對x bh的影響

今天在做實驗的時候發現 truncate table後x bh不會再記錄對此table塊的訪問,具體實驗如下 sql create table t3 a number table created.sql select object id from dba objects where object n...

使用 TRUNCATE TABLE 刪除所有行

若要刪除表中的所有行,則 truncate table 語句是一種快速 無日誌記錄的方法。truncate table 與不含有 where 子句的 delete 語句在功能上相同。但是,truncate table 速度更快,並且使用更少的系統資源和事務日誌資源。與 delete 語句相比,tru...