主要區別
DELETE和TRUNCATE是結構化查詢語言(SQL)中用於從表中刪除記錄或資料的兩個術語。雖然這兩個命令的最終結果是相同的,但這兩個命令之間也存在一些差異,這是很重要的,需要理解。DELETE和TRUNCATE的主要區別在於DELTE是一個數據操作語言(DML)命令,而TRUNCATE是一個數據定義語言(DDL)命令。
什麼是截斷(truncate)?
TRUNCATE也是一個日誌操作。TRUNCATE TABLE語句是SQL中的一個DDL命令,它標記要釋放的表的範圍。此操作的結果是,表中的所有資料都會立即刪除,通常會繞過一些完整性強制機制。它是在SQL:2008標準中引入的。“TRUNCATE TABLE mytable”語句在邏輯上等同於不帶“WHERE”子句的“DELETE FROM mytable”語句。“TRUNCATE TABLE”透過釋放表使用的資料頁立即刪除表中的所有資料。這減少了記錄刪除操作的資源開銷,以及所需的鎖數量。我們不能在“TRUNCATE TABLE”語句中指定“WHERE”子句,因為它要麼全有要麼全無。
什麼是刪除(delete)?
在資料庫SQL中,DELETE意味著從表中刪除一個或多個記錄或資料的語句。可以使用移除所有記錄的條件來定義移除/刪除子集。一些資料庫管理系統(DBMs)如MySQL允許使用一個delete語句(也稱為multi table delete)從多個表中刪除行。DELETE語句的語法是DELETE FROM table_name[WHERE condition]。現在,符合“WHERE”條件的任何行都將從表中刪除。如果語句中省略了“WHERE”子句,則表中的所有行都將被刪除。因此,“DELETE”語句應該謹慎使用。此外,“DELETE”語句不返回任何行;也就是說,它不會生成結果集。
主要區別
- DELETE是資料操作語言(DML)命令,TRUNCATE是資料定義語言(DDL)命令。
- TRUNCATE比DELETE快得多,因為它可以立即擦除所有資料。
- 刪除中需要“WHERE”條件。如果語句中省略了“WHERE”子句,則表中的所有行都將被刪除。但我們不能在“TRUNCATE TABLE”語句中指定“WHERE”子句,因為它要麼全有要麼全無。
- DELETE從表中刪除部分或所有行,而TRUNCATE刪除所有行。
- DELETE導致表上的所有DELETE觸發器觸發,而TRUNCATE操作期間沒有觸發觸發器,因為它不適用於單個行。
- Delete可用於索引檢視,TRUNCATE不能用於索引檢視。
- DELETE使用行鎖執行,表中的每一行都被鎖定刪除,TRUNCATE使用表鎖執行,所有表都被鎖定以刪除所有記錄。