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