sql server 中刪除表中資料truncate和delete的區別(轉載自.net學習網)

來源:互聯網
上載者:User

標籤:使用   sp   for   strong   檔案   資料   on   div   bs   

我們都知道truncate table可以用來刪除整個表的內容,它與delete後面不跟where條件的效果是一樣。但除此之外,我們還清楚它們之間有其它的區別嗎?本章我們將一起討論truncate與delete區別。

我們先看一下truncate table的說明:
刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE在功能上與沒有WHERE子句的DELETE語句相同;但是,TRUNCATE TABLE速度更快,使用的系統資源和交易記錄資源更少。

truncate table的文法:

truncate table 要刪除資料的表名



區別:
1,truncate刪除資料後,表中識別欄位重設為定義的種子值,也就是識別欄位重新開始計數,而使 
用delete刪除資料,則會保留標識計數器,新的自增量會從刪除前的最大值開始計數。

2,使用truncate刪除資料將不觸發觸發器,而delete會觸發delete觸發器。

3,truncate所佔用的交易記錄空間會很少,因為truncate不會計錄刪除過程,而delete每刪除一行資料,都會在交易記錄中記錄一條資料,已便日後能夠恢複資料。也就是說,使用truncate刪除的資料不可恢複,但速度比delete要快很多。而通過delete刪除的資料可以通過備份檔案來恢複。

4,truncate是一個ddl語言,它會被隱式提交,所以不能通過rollback命令來撤消truncate命令。

以上四點為比較重要的部分,知道了上面四點後,也就大概能夠清楚的瞭解什麼時候用truncate,什麼時候用delete了。

以下為比較抽象的區別:
5,truncate使用的鎖比較少,因為使用truncate table時是鎖定表和頁,而使用delete則是鎖定表中的所有行以便刪除。

6,使用delete刪除所有資料,在表中仍會留下一個空頁,也就是刪除前的資料所佔用的空間還被佔用著,不會釋放掉(當前可以通過其它命令來釋放),而使用truncate table則不會留下任何頁。

7,truncate會重新設定表的索引,所以使用truncate操作後的表的索引速度會比delete操作後的表要快一些。

注意:雖然truncate table在刪除資料的速度上會佔有一定的優勢,但並不是在所有的情況我們都可以使用truncate,存在以下情況就使用truncate就會失敗。
1,要刪除資料的表包含foreign key約束,而delete則可以通過串聯刪除來刪除相關聯的資料。
2,被索引檢視表引用過的表,也不能使用truncate.

以上為本人整理的truncate table與delete之間的區別,有不對或漏掉的部分請大家指出來,一起討論。

sql server 中刪除表中資料truncate和delete的區別(轉載自.net學習網)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.