首先講一下,truncate命令: 日誌
語法:TRUNCATE TABLE table;索引
表格裏的數據被清空,存儲空間被釋放。事務
運行後會自動提交,包括以前其它未提交的會話,於是一旦清空沒法回退。資源
只有表格的建立者或者其餘擁有刪除任意表格權限的用戶(如DBA)才能清空表格。get
TRUNCATE TABLE dept30;table
Table truncated.權限
------------------------------------------------------------------------------------------------------------語法
下面講一下truncate命令和delete的區別:數據
一、TRUNCATE在各類表上不管是大的仍是小的都很是快。若是有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。tab
二、TRUNCATE是一個DDL語言,向其餘全部的DDL語言同樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
三、TRUNCATE將從新設置高水平線和全部的索引。在對整個表和索引進行徹底瀏覽時,通過TRUNCATE操做後的表比DELETE操做後的表要快得多。
四、TRUNCATE不能觸發任何DELETE觸發器。
五、不能授予任何人清空他人的表的權限。
六、當表被清空後表和表的索引講從新設置成初始大小,而delete則不能。
七、不能清空父表。 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 語句。
--------------------------------------------------------------------------------------
以上只是介紹一下兩個命令的用法,下面說一下個人推薦用法,truncate命令速度快,佔用資源少,若是你能肯定當前表裏的數據徹底沒有用的話可使用此命令,方面快捷,若是數據或許有用,那你最好作好備份,不然一旦使用此命令,就悔不當初了,固然delete命令仍是有好處的,若是不能保證此後的數據有不有用,可是當前不知道,或者乾脆就是誤刪了,那麼使用rollback命令直接回滾,固然rollback命令能夠添加回滾點,定位回滾,恢復數據比較方便,因此說對與初學者,樓主強烈建議你們刪除數據時使用delete命令,麻煩事麻煩了點,可是保險一點,這是個人教訓啊,誤用truncate命令清空了一個表,還好這個表是可有可無的,不然我就只有以謝天下了。固然,很是強烈的建議是,作任何操做前,對於有用的數據都要事先備份,無論用不用得着,有備無患。