SQL數(shù)據(jù)庫(kù)中Truncate的用法
runcate是一個(gè)能夠快速清空資料表內(nèi)所有資料的SQL語(yǔ)法。這篇文章主要介紹了SQL中Truncate的用法,需要的朋友可以參考下...
Truncate是一個(gè)能夠快速清空資料表內(nèi)所有資料的SQL語(yǔ)法。這篇文章主要介紹了SQL中Truncate的用法,需要的朋友可以參考下
刪除表中的數(shù)據(jù)的方法有delete,truncate, 其中TRUNCATE TABLE用于刪除表中的所有行,而不記錄單個(gè)行刪除操作。TRUNCATE TABLE 與沒(méi)有 WHERE 子句的 DELETE 語(yǔ)句類(lèi)似;但是,TRUNCATE TABLE 速度更快,使用的系統(tǒng)資源和事務(wù)日志資源更少。下面介紹SQL中Truncate的用法
當(dāng)你不再需要該表時(shí), 用 drop;當(dāng)你仍要保留該表,但要?jiǎng)h除所有記錄時(shí), 用 truncate;當(dāng)你要?jiǎng)h除部分記錄時(shí)(always with a WHERE clause), 用 delete.
Truncate是一個(gè)能夠快速清空資料表內(nèi)所有資料的SQL語(yǔ)法。并且能針對(duì)具有自動(dòng)遞增值的字段,做計(jì)數(shù)重置歸零重新計(jì)算的作用。
一、Truncate語(yǔ)法
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
參數(shù)
database_name
數(shù)據(jù)庫(kù)的名稱(chēng)。
schema_name
表所屬架構(gòu)的名稱(chēng)。
table_name
要截?cái)嗟谋淼拿Q(chēng),或要?jiǎng)h除其全部行的表的名稱(chēng)。
二、Truncate使用注意事項(xiàng)
1、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語(yǔ)句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務(wù)日志資源少。
2、DELETE 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。TRUNCATE TABLE 通過(guò)釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋放。
3、TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識(shí)所用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用 DELETE。如果要?jiǎng)h除表定義及其數(shù)據(jù),請(qǐng)使用 DROP TABLE 語(yǔ)句。
4、對(duì)于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子句的 DELETE 語(yǔ)句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。
5、TRUNCATE TABLE 不能用于參與了索引視圖的表。
6、對(duì)用TRUNCATE TABLE刪除數(shù)據(jù)的表上增加數(shù)據(jù)時(shí),要使用UPDATE STATISTICS來(lái)維護(hù)索引信息。
7、如果有ROLLBACK語(yǔ)句,DELETE操作將被撤銷(xiāo),但TRUNCATE不會(huì)撤銷(xiāo)。
三、不能對(duì)以下表使用 TRUNCATE TABLE
1、由 FOREIGN KEY 約束引用的表。(您可以截?cái)嗑哂幸米陨淼耐怄I的表。)
2、參與索引視圖的表。
3、通過(guò)使用事務(wù)復(fù)制或合并復(fù)制發(fā)布的表。
4、對(duì)于具有以上一個(gè)或多個(gè)特征的表,請(qǐng)使用 DELETE 語(yǔ)句。
5、TRUNCATE TABLE 不能激活觸發(fā)器,因?yàn)樵摬僮鞑挥涗浉鱾€(gè)行刪除。
四、TRUNCATE、Drop、Delete區(qū)別
1、drop和delete只是刪除表的數(shù)據(jù)(定義),drop語(yǔ)句將刪除表的結(jié)構(gòu)、被依賴(lài)的約束(constrain)、觸發(fā)器 (trigger)、索引(index);依賴(lài)于該表的存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài)。
2、delete語(yǔ)句是DML語(yǔ)言,這個(gè)操作會(huì)放在rollback segement中,事物提交后才生效;如果有相應(yīng)的觸發(fā)器(trigger),執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。truncate、drop是DDL語(yǔ)言,操作后即 生效,原數(shù)據(jù)不會(huì)放到rollback中,不能回滾,操作不會(huì)觸發(fā)trigger。
3、delete語(yǔ)句不影響表所占用的extent、高水線(xiàn)(high watermark)保持原位置不動(dòng)。drop語(yǔ)句將表所占用的空間全部釋放。truncate語(yǔ)句缺省情況下將空間釋放到minextents的 extent,除非使用reuse storage。truncate會(huì)將高水線(xiàn)復(fù)位(回到最初)。
4、效率方面:drop > truncate > delete
5、安全性:小心使用drop與truncate,尤其是在 沒(méi)有備份的時(shí)候,想刪除部分?jǐn)?shù)據(jù)可使用delete需要帶上where子句,回滾段要足夠大,想刪除表可以用drop,想保留表只是想刪除表的所有數(shù)據(jù)、 如果跟事物無(wú)關(guān)可以使用truncate,如果和事物有關(guān)、又或者想觸發(fā) trigger,還是用delete,如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入、插入數(shù)據(jù)。
6、delete是DML語(yǔ)句,不會(huì)自動(dòng)提交。drop/truncate都是DDL語(yǔ)句,執(zhí)行后會(huì)自動(dòng)提交。
7、drop一般用于刪除整體性數(shù)據(jù) 如表,模式,索引,視圖,完整性限制等;delete用于刪除局部性數(shù)據(jù) 如表中的某一元組
8、DROP把表結(jié)構(gòu)都刪了;DELETE只是把數(shù)據(jù)清掉
9、當(dāng)你不再需要該表時(shí), 用 drop;當(dāng)你仍要保留該表,但要?jiǎng)h除所有記錄時(shí), 用 truncate;當(dāng)你要?jiǎng)h除部分記錄時(shí)(always with a WHERE clause), 用 delete.
總結(jié)
以上所述是小編給大家介紹SQL數(shù)據(jù)庫(kù)中Truncate的用法,希望對(duì)大家有所幫助.。
- MyBatis SQL數(shù)據(jù)庫(kù)xml處理小于號(hào)與大于號(hào)正確的格式
- SQL Server數(shù)據(jù)庫(kù)中分頁(yè)編號(hào)的另一種方式
- Sql Server數(shù)據(jù)庫(kù)的一些知識(shí)點(diǎn)定義和總結(jié)
- Win10系統(tǒng)服務(wù)器安裝MySQL8.0.13遇到的問(wèn)題及解決方法
- MyBatis SQL xml處理小于號(hào)與大于號(hào)正確的格式
- Sql Server數(shù)據(jù)庫(kù)開(kāi)窗函數(shù)Over()的使用實(shí)例詳解
- SQL在自增列插入指定數(shù)據(jù)的操作方法
- SQL Server在分頁(yè)獲取數(shù)據(jù)的同時(shí)獲取到總記錄數(shù)的兩種
- 使用SQL語(yǔ)句去掉重復(fù)記錄的兩種方法
- SQL server數(shù)據(jù)庫(kù)高可用日志傳送的方法
MyBatis SQL數(shù)據(jù)庫(kù)xml處理小于號(hào)與大于號(hào)正確的格式
文章主要介紹了MyBatis SQL xml處理小于號(hào)與大于號(hào)正確的格式,需要的朋友可以參考下 當(dāng)我們需要通過(guò)xml格式處理sql語(yǔ)句時(shí),經(jīng)常會(huì)用到< ,<=,>,>=等符號(hào),但是很容易引起xml格式的錯(cuò)誤,這樣會(huì)導(dǎo)致后臺(tái)將xml字符串轉(zhuǎn)換為xml文檔時(shí)報(bào)錯(cuò),從而導(dǎo)致程序錯(cuò)誤。...
SQL Server數(shù)據(jù)庫(kù)中分頁(yè)編號(hào)的另一種方式
文章主要介紹了SQL Server 分頁(yè)編號(hào)的另一種方式,需要的朋友可以參考下今天看書(shū)講T-SQL,看到了UNBOUNDED PRECEDING,就想比對(duì)下ROW_NUMBER()的運(yùn)行速度。...
Sql Server數(shù)據(jù)庫(kù)的一些知識(shí)點(diǎn)定義和總結(jié)
文章主要給大家總結(jié)介紹了關(guān)于Sql Server的一些知識(shí)點(diǎn)定義文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)...
Win10系統(tǒng)服務(wù)器安裝MySQL8.0.13遇到的問(wèn)題及解決方法
文章主要介紹了Win10系統(tǒng)安裝MySQL8.0.13遇到的問(wèn)題及解決方法,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...
MyBatis SQL xml處理小于號(hào)與大于號(hào)正確的格式
文章主要介紹了MyBatis SQL xml處理小于號(hào)與大于號(hào)正確的格式,需要的朋友可以參考下當(dāng)我們需要通過(guò)xml格式處理sql語(yǔ)句時(shí),經(jīng)常會(huì)用到< ,<=,>,>=等符號(hào),但是很容易引起xml格式的錯(cuò)...
Sql Server數(shù)據(jù)庫(kù)開(kāi)窗函數(shù)Over()的使用實(shí)例詳解
文章主要介紹了Sql Server 開(kāi)窗函數(shù)Over()的使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下利用over(),將統(tǒng)計(jì)信息計(jì)算出來(lái),然后直接篩選結(jié)果集 declare @t table(...
SQL在自增列插入指定數(shù)據(jù)的操作方法
SQL Server? 中數(shù)據(jù)表往往會(huì)設(shè)置自增列,常見(jiàn)的比如說(shuō) 首列的ID列。 往數(shù)據(jù)表插入新數(shù)據(jù)的時(shí)候,自增列是跳過(guò)的,無(wú)需插入即會(huì)按照設(shè)置的自增規(guī)則進(jìn)行列增長(zhǎng)。...
SQL Server在分頁(yè)獲取數(shù)據(jù)的同時(shí)獲取到總記錄數(shù)的兩種方法
本文通過(guò)兩種方法給大家介紹SQL Server 在分頁(yè)獲取數(shù)據(jù)的同時(shí)獲取到總記錄數(shù),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧。SQL Server 獲取數(shù)據(jù)的總記錄數(shù),有兩種方式:1.先分頁(yè)獲...
使用SQL語(yǔ)句去掉重復(fù)記錄的兩種方法
文章主要介紹了用SQL語(yǔ)句去掉重復(fù)的記錄的兩種方式,兩種方式都可以使用臨時(shí)表操作,具體實(shí)現(xiàn)方法大家跟隨小編一起通過(guò)本文學(xué)習(xí)吧海量數(shù)據(jù)(百萬(wàn)以上),其中有些全部字段都相同,有些...
SQL server數(shù)據(jù)庫(kù)高可用日志傳送的方法
SQL Server 使用日志傳送,您可以自動(dòng)將“主服務(wù)器”實(shí)例上“主數(shù)據(jù)庫(kù)”內(nèi)的事務(wù)日志備份發(fā)送到單獨(dú)“輔助服務(wù)器”實(shí)例上的一個(gè)或多個(gè)“...