首頁 >資料庫 >mysql教程 >SQL 中的 TRUNCATE 與 DELETE:主要差異是什麼?

SQL 中的 TRUNCATE 與 DELETE:主要差異是什麼?

Linda Hamilton
Linda Hamilton原創
2025-01-15 09:17:44149瀏覽

TRUNCATE vs. DELETE in SQL: What are the Key Differences?

深入理解 SQL 中 TRUNCATE 和 DELETE 的差異

SQL 中的 TRUNCATE 和 DELETE 指令都用於刪除表中的數據,但它們的方法不同,TRUNCATE 通常提供更快、更徹底的資料刪除方式。

語句類型

與作為 DML(資料操縱語言)的 DELETE 不同,TRUNCATE 屬於 DDL(資料定義語言)。

提交與回滾

指令回滾能力因資料庫而異:

  • SQL Server 和 PostgreSQL: 兩者都允許 TRUNCATE 的回溯。
  • Oracle: TRUNCATE 作為 DDL 操作,涉及兩次提交,使其不可逆。但是,Oracle 的 Flashback 功能可以部分緩解這個問題。

空間回收

DELETE 留下空閒空間,而 TRUNCATE 會回收它。 Oracle 的 REUSE STORAGE 選項可保留資料段,在重新載入表格時提高效率。

行範圍

DELETE 允許選擇性地刪除行,而 TRUNCATE 無條件地刪除所有行。 Oracle 允許截斷分割區表中的特定分割區。

物件類型

DELETE 適用於表格和聚集表,但 TRUNCATE 僅限於表格或整個叢集(Oracle 特定)。

資料物件識別

在 Oracle 中,DELETE 保留資料物件 ID,而 TRUNCATE 指派一個新的 ID,除非自資料表建立以來沒有發生插入操作。

Flashback(Oracle)

DELETE 支援 Flashback 功能,但 TRUNCATE 除非使用 FLASHBACK ARCHIVE 功能,否則會阻止它。

權限

可以授予使用者 DELETE 權限,但 TRUNCATE 需要 DROP ANY TABLE 授權(Oracle 特定)。

效能注意事項

  • Redo/Undo:DELETE 產生大量的撤銷數據,而 TRUNCATE 的佔用空間可以忽略不計。
  • 索引:TRUNCATE 恢復已停用的索引(Oracle 特定)。
  • 外鍵:如果外鍵引用該表,則禁止使用 TRUNCATE,而 DELETE 的行為取決於配置。
  • 表格鎖定:TRUNCATE 需要獨佔鎖定(Oracle 特定),而 DELETE 傾向於共用鎖定。

觸發器和遠端執行

TRUNCATE 支援 DDL 觸發器(Oracle 特定)。 Oracle 不允許遠端 TRUNCATE 執行。

識別列

在 SQL Server 中,TRUNCATE 會重設識別列序列,但 DELETE 不會。

結果集

在 Oracle PL/SQL 中,DELETE 語句可以將已刪除的行傳回給客戶端。

以上是SQL 中的 TRUNCATE 與 DELETE:主要差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn