深入理解 SQL 中 TRUNCATE 和 DELETE 的差異
SQL 中的 TRUNCATE 和 DELETE 指令都用於刪除表中的數據,但它們的方法不同,TRUNCATE 通常提供更快、更徹底的資料刪除方式。
語句類型
與作為 DML(資料操縱語言)的 DELETE 不同,TRUNCATE 屬於 DDL(資料定義語言)。
提交與回滾
指令回滾能力因資料庫而異:
空間回收
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 特定)。
效能注意事項
觸發器和遠端執行
TRUNCATE 支援 DDL 觸發器(Oracle 特定)。 Oracle 不允許遠端 TRUNCATE 執行。
識別列
在 SQL Server 中,TRUNCATE 會重設識別列序列,但 DELETE 不會。
結果集
在 Oracle PL/SQL 中,DELETE 語句可以將已刪除的行傳回給客戶端。
以上是SQL 中的 TRUNCATE 與 DELETE:主要差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!