TRUNCATE 快速刪除表中的所有數(shù)據(jù)
更新時間:2010年05月13日 19:58:13 作者:
刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 在功能上與沒有 WHERE 子句的 DELETE 語句相同;但是,TRUNCATE TABLE 速度更快,使用的系統(tǒng)資源和事務(wù)日志資源更少。
備注
與 DELETE 語句相比,TRUNCATE TABLE 具有以下優(yōu)點:
所用的事務(wù)日志空間較少。
DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一個條目。TRUNCATE TABLE 通過釋放用于存儲表數(shù)據(jù)的數(shù)據(jù)頁來刪除數(shù)據(jù),并且在事務(wù)日志中只記錄頁釋放。
使用的鎖通常較少。
當(dāng)使用行鎖執(zhí)行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。
表中將毫無例外地不留下任何頁。
執(zhí)行 DELETE 語句后,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執(zhí)行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對于索引,刪除操作會留下一些空頁,盡管這些頁會通過后臺清除進(jìn)程迅速釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。若要刪除表定義及其數(shù)據(jù),請使用 DROP TABLE 語句。
如果表包含標(biāo)識列,該列的計數(shù)器重置為該列定義的種子值。如果未定義種子,則使用默認(rèn)值 1。若要保留標(biāo)識計數(shù)器,請使用 DELETE。
限制
不能對以下表使用 TRUNCATE TABLE:
由 FOREIGN KEY 約束引用的表。
參與索引視圖的表。
通過使用事務(wù)復(fù)制或合并復(fù)制發(fā)布的表。
對于具有以上一個或多個特征的表,請使用 DELETE 語句。
TRUNCATE TABLE 不能激活觸發(fā)器,因為該操作不記錄各個行刪除。有關(guān)詳細(xì)信息,請參閱 CREATE TRIGGER (Transact-SQL)。
與 DELETE 語句相比,TRUNCATE TABLE 具有以下優(yōu)點:
所用的事務(wù)日志空間較少。
DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一個條目。TRUNCATE TABLE 通過釋放用于存儲表數(shù)據(jù)的數(shù)據(jù)頁來刪除數(shù)據(jù),并且在事務(wù)日志中只記錄頁釋放。
使用的鎖通常較少。
當(dāng)使用行鎖執(zhí)行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。
表中將毫無例外地不留下任何頁。
執(zhí)行 DELETE 語句后,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執(zhí)行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對于索引,刪除操作會留下一些空頁,盡管這些頁會通過后臺清除進(jìn)程迅速釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。若要刪除表定義及其數(shù)據(jù),請使用 DROP TABLE 語句。
如果表包含標(biāo)識列,該列的計數(shù)器重置為該列定義的種子值。如果未定義種子,則使用默認(rèn)值 1。若要保留標(biāo)識計數(shù)器,請使用 DELETE。
限制
不能對以下表使用 TRUNCATE TABLE:
由 FOREIGN KEY 約束引用的表。
參與索引視圖的表。
通過使用事務(wù)復(fù)制或合并復(fù)制發(fā)布的表。
對于具有以上一個或多個特征的表,請使用 DELETE 語句。
TRUNCATE TABLE 不能激活觸發(fā)器,因為該操作不記錄各個行刪除。有關(guān)詳細(xì)信息,請參閱 CREATE TRIGGER (Transact-SQL)。
您可能感興趣的文章:
- oracle數(shù)據(jù)庫刪除數(shù)據(jù)Delete語句和Truncate語句的使用比較
- 數(shù)據(jù)庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(實例說明)
- MySQL刪除數(shù)據(jù)Delete與Truncate語句使用比較
- smarty中先strip_tags過濾html標(biāo)簽后truncate截取文章運用
- drop,truncate與delete的區(qū)別
- sqlserver 日志恢復(fù)方法(搞定drop和truncate)
- 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實現(xiàn)mysql從零開始
- delete from 表名與truncate table 表名區(qū)別
相關(guān)文章
sqlserver索引的原理及索引建立的注意事項小結(jié)
本文起點可能會相對高點,首先你的很熟悉索引以及他們的存儲結(jié)構(gòu) 有很多地方你可能覺得有異議,歡迎一起討論2012-07-07
sqlserver中關(guān)于WINDOWS性能計數(shù)器的介紹
sqlserver中關(guān)于WINDOWS 性能計數(shù)器的介紹,需要的朋友可以看下2013-01-01
通過T-SQL語句實現(xiàn)數(shù)據(jù)庫備份與還原的代碼
利用T-SQL語句,實現(xiàn)數(shù)據(jù)庫的備份與還原的功能,需要的朋友可以參考下。2011-11-11
Sql Server刪除數(shù)據(jù)庫時提示數(shù)據(jù)庫正在被使用的解決辦法
當(dāng)您嘗試刪除SQL Server中的某個對象(如數(shù)據(jù)庫、表等)時,如果有程序或進(jìn)程正在使用該對象,您可能會收到一個錯誤信息,提示該對象正被使用,所以本文給大家介紹了Sql Server刪除數(shù)據(jù)庫時提示數(shù)據(jù)庫正在被使用的解決辦法,需要的朋友可以參考下2024-05-05
SQL語句刪除2條重復(fù)數(shù)據(jù)一條保留一條
SQL語句2條完全一樣的數(shù)據(jù)刪除一條保留一條,SQL Server 2005 Express 下測試通過, 僅供參考2012-06-06
用SQL語句實現(xiàn)隨機查詢數(shù)據(jù)并不顯示錯誤數(shù)據(jù)的方法
用SQL語句實現(xiàn)隨機查詢數(shù)據(jù)并不顯示錯誤數(shù)據(jù)的方法...2007-11-11
SQL小技巧 又快又簡單的得到你的數(shù)據(jù)庫每個表的記錄數(shù)
說到如何得到表的行數(shù),大家首先想到的應(yīng)該是select count(*) from table1....2009-09-09

