Oracle中的Truncate和Delete語句
首先講一下,truncate命令:
語法:TRUNCATE TABLE table;
表格里的數據被清空,存儲空間被釋放。
運行后會自動提交,包括之前其它未提交的會話,因而一旦清空無法回退。
只有表格的創建者或者其他擁有刪除任意表格權限的用戶(如DBA)才能清空表格。
TRUNCATE TABLE dept30;
Table truncated.
------------------------------------------------------------------------------------------------------------
下面講一下truncate命令和delete的區別:
1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。
2、TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3、TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能觸發任何DELETE觸發器。
5、不能授予任何人清空他人的表的權限。
6、當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
7、不能清空父表。 TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE 在默認是 DROP STORAGE 當使用DROP STORAGE時將縮短表和表索引,將表收縮到最小范圍,並重新設置NEXT參數。REUSE STORAGE不會縮短表或者調整NEXT參數在特殊情況下使用 REUSE ST
DELETE語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的的刪除操作作為事務記錄在日志中保存以便進行進行回滾操作。
TRUNCATE TABLE 則一次性地從表中刪除所有的數據頁並不把單獨的刪除操作記錄記入日志保存,刪除行是不能恢復的。並且在刪除的過程中不會激活與表有關的刪除觸發器。執行速度快。
===========================================================
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的
系統和事務日志資源少。
DELETE 語句每次刪除一行,並在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日志中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。
如果想保留標識計數值,請改用 DELETE。
如果要刪除表定義及其數據,請使用 DROP TABLE 語句。