truncate、delete、drop

相同點:

1.三者共同點:數據庫

  truncate、不帶where字句的delete、drop都會刪除表內的數據函數

2.drop、truncate的共同點:日誌

  drop、truncate都得DDL語句(數據庫定義語言),執行後自動提交索引

不一樣點:

1. drop與truncate、delete的不一樣點事務

  truncate 和 delete 只刪除數據不刪除表的結構(定義)資源

  drop 語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴於該表的存儲過程/函數將保留,可是變爲 invalid 狀態。引用

2. delete與truncate、drop的不一樣點數據

  delete 語句是數據庫操做語言(dml),這個操做會放到 rollback segement 中,事務提交以後才生效;若是有相應的 trigger,執行的時候將被觸發。存儲過程

  truncate、drop 是數據庫定義語言(ddl),操做當即生效,原數據不放到 rollback segment 中,不能回滾,操做不觸發 trigger。語言

4.速度

  通常來講: drop> truncate > delete

5.使用上

  想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.

  想刪除表,固然用 drop

  想保留表而將全部數據刪除,若是和事務無關,用truncate便可。若是和事務有關,或者想觸發trigger,仍是用delete。

  若是是整理表內部的碎片,能夠用truncate跟上reuse stroage,再從新導入/插入數據。

6.truncate與delete

  TRUNCATE   TABLE   在功能上與不帶   WHERE   子句的   DELETE   語句相同:兩者均刪除表中的所有行。

  但   TRUNCATE   TABLE   比   DELETE   速度快,且使用的系統和事務日誌資源少。

  DELETE   語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE   TABLE   經過釋放存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放。 

  對於由   FOREIGN   KEY   約束引用的表,不能使用   TRUNCATE   TABLE,而應使用不帶   WHERE   子句的   DELETE   語句。

  因爲   TRUNCATE   TABLE   不記錄在日誌中,因此它不能激活觸發器。   

  TRUNCATE   TABLE   不能用於參與了索引視圖的表。  

相關文章
相關標籤/搜索