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命令一樣撤銷。