十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問題一站解決
truncate和delete的區(qū)別在于四個(gè)方面:1. 條件刪除、2. 事務(wù)回滾、3. 清理速度、4. 高水位重置。因?yàn)閐elete是可以帶WHERE的,所以支持條件刪除;而truncate只能刪除整個(gè)表。

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出漢南免費(fèi)做網(wǎng)站回饋大家。
1. 條件刪除
這個(gè)比較好理解,因?yàn)閐elete是可以帶WHERE的,所以支持條件刪除;而truncate只能刪除整個(gè)表。
2. 事務(wù)回滾
由于delete是數(shù)據(jù)操作語(yǔ)言(DML - Data Manipulation Language),操作時(shí)原數(shù)據(jù)會(huì)被放到 rollback segment中,可以被回滾;而truncate是數(shù)據(jù)定義語(yǔ)言(DDL - Data Definition Language),操作時(shí)不會(huì)進(jìn)行存儲(chǔ),不能進(jìn)行回滾。
3. 清理速度
在數(shù)據(jù)量比較小的情況下,delete和truncate的清理速度差別不是很大。但是數(shù)據(jù)量很大的時(shí)候就能看出區(qū)別。由于第二項(xiàng)中說的,truncate不需要支持回滾,所以使用的系統(tǒng)和事務(wù)日志資源少。delete 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng),固然會(huì)慢,但是相對(duì)來說也較安全。
4. 高水位重置
隨著不斷地進(jìn)行表記錄的DML操作,會(huì)不斷提高表的高水位線(HWM),delete操作之后雖然表的數(shù)據(jù)刪除了,但是并沒有降低表的高水位,隨著DML操作數(shù)據(jù)庫(kù)容量也只會(huì)上升,不會(huì)下降。所以如果使用delete,就算將表中的數(shù)據(jù)減少了很多,在查詢時(shí)還是很和delete操作前速度一樣。
TRUNCATE
TABLE
刪除表中的所有行,而不記錄單個(gè)行刪除操作。
語(yǔ)法
TRUNCATE
TABLE
name
參數(shù)
name
是要截?cái)嗟谋淼拿Q或要?jiǎng)h除其全部行的表的名稱。
注釋
TRUNCATE
TABLE
在功能上與不帶
WHERE
子句的
DELETE
語(yǔ)句相同:二者均刪除表中的全部行。但
TRUNCATE
TABLE
比
DELETE
速度快,且使用的系統(tǒng)和事務(wù)日志資源少。
DELETE
語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。TRUNCATE
TABLE
通過釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋放。
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ǔ)句。
對(duì)于由
FOREIGN
KEY
約束引用的表,不能使用
TRUNCATE
TABLE,而應(yīng)使用不帶
WHERE
子句的
DELETE
語(yǔ)句。由于
TRUNCATE
TABLE
不記錄在日志中,所以它不能激活觸發(fā)器。
TRUNCATE
TABLE
不能用于參與了索引視圖的表。
示例
下例刪除
authors
表中的所有數(shù)據(jù)。
TRUNCATE
TABLE
authors
權(quán)限
TRUNCATE
TABLE權(quán)限默認(rèn)授予表所有者、sysadmin固定服務(wù)器角色成員、db_owner
和
db_ddladmin
固定數(shù)據(jù)庫(kù)角色成員且不可轉(zhuǎn)讓。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
您可能感興趣的文章:Oracle給用戶授權(quán)truncatetable的實(shí)現(xiàn)方案delete
from
表名與truncate
table
表名區(qū)別SQL中Truncate的用法golang實(shí)戰(zhàn)之truncate日志文件詳解tf.truncated_normal與tf.random_normal的詳細(xì)用法smarty中改進(jìn)truncate使其支持中文的方法SQL
Server中TRUNCATE事務(wù)回滾操作方法實(shí)例理解SQL中truncate和delete的區(qū)別詳解SQL中drop、delete和truncate的異同Mysql開啟慢SQL并分析原因
delete和truncate命令之間的差別
1、命令類型
delete是數(shù)據(jù)操作語(yǔ)言(DML)命令;而truncate是數(shù)據(jù)定義語(yǔ)言(DDL)命令。
2、功能
delete命令根據(jù)指定的SQL語(yǔ)句從表中刪除單個(gè),多個(gè)或所有記錄;而truncate命令從數(shù)據(jù)庫(kù)中刪除所有記錄和表結(jié)構(gòu)。
3、Where子句
delete命令支持WHERE子句,可以使用帶有DELETE的where子句來過濾和刪除特定記錄;而,truncate命令不支持WHERE子句。
4、鎖定
delete命令采用行級(jí)鎖定,表中的每一行都被鎖定以進(jìn)行刪除;truncate命令采用表級(jí)鎖定,鎖定了整個(gè)表以刪除所有記錄。
5、索引視圖
delete命令可以與索引視圖一起使用;而,truncate命令不能與索引視圖一起使用。
6、執(zhí)行速度
由于delete命令維護(hù)日志,因此速度很慢。但是,由于truncate命令在事務(wù)日志中維護(hù)最少的日志記錄,因此執(zhí)行速度更快。
7、表結(jié)構(gòu)
delete命令不會(huì)影響表結(jié)構(gòu),而truncate命令會(huì)從數(shù)據(jù)庫(kù)中刪除表結(jié)構(gòu)。
8、事務(wù)空間
delete命令比truncate命令使用更多的事務(wù)空間。