SQLSERVER Truncate使用注意事項

2022-02-15 11:48:46 字數 2278 閱讀 3684

當你不再需要該錶時, 用 drop;當你仍要保留該錶,但要刪除所有記錄時, 用 truncate;當你要刪除部分記錄時(always with a where clause), 用 delete.

truncate是乙個能夠快速清空資料表內所有資料的sql語法。並且能針對具有自動遞增值的字段,做計數重置歸零重新計算的作用。

一、truncate語法

[  ]

table_name

[ ; ]

引數database_name

資料庫的名稱。

schema_name

表所屬架構的名稱。

table_name

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

二、truncate使用注意事項

1、truncate table 在功能上與不帶 where 子句的 delete 語句相同:二者均刪除表中的全部行。但 truncate table 比 delete 速度快,且使用的系統和事務日誌資源少。

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

3、truncate table 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 delete。如果要刪除表定義及其資料,請使用 drop table 語句。

4、對於由 foreign key 約束引用的表,不能使用 truncate table,而應使用不帶 where 子句的 delete 語句。由於 truncate table 不記錄在日誌中,所以它不能啟用觸發器。

5、truncate table 不能用於參與了索引檢視的表。

6、對用truncate table刪除資料的表上增加資料時,要使用update statistics來維護索引資訊。

7、如果有rollback語句,delete操作將被撤銷,但truncate不會撤銷。

三、不能對以下表使用 truncate table

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

2、參與索引檢視的表。

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

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

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

四、truncate、drop、delete區別

1.drop和delete只是刪除表的資料(定義),drop語句將刪除表的結構、被依賴的約束(constrain)、觸發器 (trigger)、索引(index);依賴於該錶的儲存過程/函式將保留,但是變為invalid狀態。

2.delete語句是dml語言,這個操作會放在rollback segement中,事物提交後才生效;如果有相應的觸發器(trigger),執行的時候將被觸發。truncate、drop是ddl語言,操作後即 生效,原資料不會放到rollback中,不能回滾,操作不會觸發trigger。

3.delete語句不影響表所占用的extent、高水線(high watermark)保持原位置不動。drop語句將表所占用的空間全部釋放。truncate語句預設情況下將空間釋放到minextents的 extent,除非使用reuse storage。truncate會將高水線復位(回到最初)。

4.效率方面:drop > truncate > delete

5.安全性:小心使用drop與truncate,尤其是在 沒有備份的時候,想刪除部分資料可使用delete需要帶上where子句,回滾段要足夠大,想刪除表可以用drop,想保留表只是想刪除表的所有資料、 如果跟事物無關可以使用truncate,如果和事物有關、又或者想觸發 trigger,還是用delete,如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新匯入、插入資料。

6.delete是dml語句,不會自動提交。drop/truncate都是ddl語句,執行後會自動提交。

7、drop一般用於刪除整體性資料 如表,模式,索引,檢視,完整性限制等;delete用於刪除區域性性資料 如表中的某一元組

8、drop把錶結構都刪了;delete只是把資料清掉

9、當你不再需要該錶時, 用 drop;當你仍要保留該錶,但要刪除所有記錄時, 用 truncate;當你要刪除部分記錄時(always with a where clause), 用 delete.

微軟bi技術***:316744959 php技術***:337619433 net技術qq群號:21386099 有問題的可以在群裡面提問

Protocol Buffers使用注意事項

protocol buffers做為廣泛使用的乙個序列化開源庫,提供了很多語言下的支援,本文就談談msvc c 使用pb遇到的問題,當然這些問題因為每個人的使用模式不同,可能都不一樣,本文也不討論怎麼寫proto及編譯。我們使用pb做序列化可以把pb生成靜態庫或者動態庫 libprotobuf.dl...

C using namespace使用注意事項

一 using 用法 1.引用命名空間。如 using system 2.自動釋放物件使用的資源。如 using sqlconnection connection new sqlconnection connectionstring connection.open 當鏈結使用完畢以後,將自動釋放sq...

關於better scroll的使用注意事項

1.動態載入資料需要重新整理滾動區域 this.nexttick 2.滾動區域上的事件,需要在註冊滾動的時候,新增 click true mounted 3.預設 y軸 滾動,需要x軸滾動,新增 scrollx true 4.上拉載入功能,註冊時需要申明,pullupload 可以為true 或者如...