嶽彩波,擅長Oracle、Mysql,有豐富的資料庫維護、調優經驗,曾服務於金融行業,目前專注於第三方支付領域。
一、知識點簡介
Truncate和delete在實際應用中都是使用比較頻繁的,他們都是刪除表數據的語句,在這裡我們整理一下兩者之間的區別,以方便大家在應用中選擇。
二、知識點內容
1、 語句類型
Truncate屬於SQL DDL語言。
Delete屬於SQL DML語言。
2、 commit
truncate執行完成自動提交。
Delete執行完成需要手工提交。
3、 回滾
Truncate不能rollback。
Delete可以rollback。
4、 存儲空間
Truncate可以釋放存儲空間。
Delete不能釋放存儲空間。
5、 高水位
Truncate執行完畢降低高水位。
Delete不能降低高水位。
6、 日誌的產生
Truncate執行過程中產生很少的日誌。
Delete執行過程中會產生大量的日誌。
7、 回退
Truncate執行的時候很少的回退。
Delete執行的時候會有大量的回退。
8、 是否可以加條件
Truncate不能加條件刪除數據。
Delete可以加條件刪除。
9、 級聯刪除
不能truncate一個帶有enable外鍵的表,會報錯ORA-02266。
可以delete一個帶有enable外鍵的表。
10、 初始大小
Truncate保留建表的初始大小。
Delete保留表的現有大小。
三、實驗過程
以上的十條總結是根據官方文檔和平時使用過程中的一些經驗總結。
四 、權威資料
官方文檔
五、總結
Truncate table table_name;和delete table_name;
這兩個語句在使用的時候要根據具體的需求來定;
delete也可以釋放少量空間,但是不能降低高水位,上邊第四項中釋放和不釋放空間都是相對來說的。
在這裡還有一個相關的小知識點,默認情況下oracle10G的空表會分配存儲空間,oracle11G的空表不會分配空間。
點擊閱讀原文可以進入社區Oracle主題,還有更多文章、資料及相關問答。
長按二維碼關注公眾號AIX專家俱樂部