SQL查詢中DELETE和TRUNCATE的區別


TRUNCATE語句和DELETE語句都屬於用於刪除表中儲存資料的SQL查詢類別。它們對不再需要的表記錄或行執行刪除操作。使用DELETE命令時,會在刪除的每個表項之前應用條件。換句話說,可以一次刪除一行或多行。但是,使用TRUNCATE命令,表中的每一行都會同時被刪除。

當我們使用DELETE查詢刪除內容時,會在事務日誌中為每一行生成一個日誌條目。因此,在提交更改之前,我們可以使用ROLLBACK檢索記錄。此外,如果我們使用TRUNCATE操作,我們可以使用ROLLBACK過程檢索記錄。但是,TRUNCATE只跟蹤儲存資料的頁面的釋放。這是關鍵區別。

什麼是DELETE命令?

DELETE是DML(資料操作語言)命令的一個例子。它可以用來從表中一次刪除一行(記錄)或多行(記錄)。

在DELETE命令的上下文中,WHERE子句表示必須滿足的條件,以便僅從目標表中刪除不需要的行。

每次執行DELETE查詢時,都會在事務日誌中生成一個日誌檔案。它首先儲存記錄,然後刪除它們。因此,如果我們刪除了一行或多行關鍵行,我們將能夠使用ROLLBACK命令檢索它們。

由於DELETE語句是DML命令,我們需要手動提交更改。請記住,ROLLBACK必須在COMMIT之前完成。

語法

DELETE from any_table Where condition;

什麼是TRUNCATE命令?

TRUNCATE是一種DDL(資料定義語言)命令。在處理表時,我們使用此命令一次刪除所有記錄。

TRUNCATE命令不像WHERE子句那樣使用任何條件來定義條件。因此,我們應該只在目標資料庫中的所有資料都不需要的情況下使用它。

TRUNCATE命令使用表鎖而不是行鎖來鎖定表和頁面,然後再執行TRUNCATE操作。因此,只記錄用於儲存條目的頁面的釋放;因此,它比DELETE語句快得多。

因為TRUNCATE是DDL命令,所以提交操作無需人工干預即可完成。執行TRUNCATE命令時,識別符號將恢復到其種子值。

語法

TRUNCATE TABLE any_table_name;

何時使用DELETE和TRUNCATE?

請注意,DELETE和TRUNCATE的主要職責相同,都是從表中刪除記錄。但是,這兩個命令執行的操作略有不同。

DROP命令是唯一可以刪除表模式、索引、約束和觸發器的命令。這兩個命令都不能做到這一點。

  • 如果要刪除表中的所有記錄,請使用TRUNCATE命令。

  • 使用DELETE命令從表中刪除單個記錄。

DELETE和TRUNCATE的區別

下表重點介紹了DELETE和TRUNCATE的主要區別:

比較依據 DELETE TRUNCATE
定義 SQL中的DELETE命令根據行中指定的條件刪除表中的一行或多行。 SQL的TRUNCATE命令用於清除表中的所有行,無論是否滿足任何條件。
語言 它是DML(資料操作語言)命令。 它是DDL(資料定義語言)命令。
提交 對DELETE命令進行更改後,我們需要手動進行COMMIT。 使用TRUNCATE命令時,您的更改會自動提交。
過程 它一次刪除一行,並對每次刪除應用條件。 它一次性清除所有資訊。
條件 WHERE子句在此用作條件。 WHERE子句在此不用作條件。
刪除後所有行都將被鎖定。 它透過使用表鎖來實現此目的,該表鎖會鎖定頁面,因此無法刪除它們。
日誌 它在日誌檔案中記錄每個事務。 唯一記錄的活動是儲存資料的頁面的釋放。
事務空間 與TRUNCATE命令相比,它消耗更多的事務空間。 與DELETE命令相比,它更少地使用事務空間。
標識 如果存在標識列,則表標識不會重置為表建立時的值。 它將表標識返回到其作為種子值賦予的值。
許可權 它需要刪除許可權。 它需要表更改許可權。
速度 對於大型資料庫,它要慢得多。 它更快,更準確地說,是即時的。

結論

SQL DELETE和SQL TRUNCATE命令都可以用來從表中刪除記錄。但是,DELETE命令使用WHERE子句指定表中要執行刪除操作的行,而TRUNCATE命令不使用任何子句,而是同時刪除所有行。這是這兩個命令的主要區別。

請記住,TRUNCATE命令可以像DELETE命令一樣撤銷。

更新於:2022年8月4日

17K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告