SQL – TRUNCATE vs DELETE
還是sqlservercentral.com的問題與解答。
問題:
Consider the following statements: create table #t (i int identity(1,1) not null, c varchar(5) not null) insert into #t (c) select 'one' truncate table #t insert into #t (c) select 'two' delete #t insert into #t (c) select 'three' select * from #t What will be the result of the select query? A. 1 , three B. 2 , three C. 3 , three
你的答案會是哪個呢?我又選錯了,選了C。如果兩次都是DELETE的話,那麼C不會錯咯。
那麼A呢?經過了兩次INSERT,不會還是1了吧。如果兩次都是TRUNCATE的話,那麼A也不會錯了。:),或者DELETE在前,TRUNCATE在後,也沒問題。
單選題,A和C都沒了,那答案就會是B咯。就像上面兩句的假設,一樣,由因得果咯。
我們看題,先是建立了一個TABLE,有兩個列,列 i 是整型的,並可自增長。列 c 是字元型的。
然後,就把 'one' 插入到TABLE。這時,TABLE裡面就有一行。其中列 i 是1,這個是自增長的。
接著,把TABLE #t 給TRUNCATE 了。TRUNCATE這個動作呢,就會把列 i 的計數器給復原為起始值了。這裡,TABLE沒記錄了,列 i 的計數器會迴歸為1。
再插入一個 'two' 到TABLE。TABLE又有了一行記錄,由於上一步的TRUNCATE,列 i 的計數器復位了,所以這個記錄的列 i 還會是1。
真費事,剛插入進去,又要DELETE了。但這次DELETE,不會復位列 i 的計數器。
又插一次 'three' 。由於列 i 的計數器沒有在上一步被複位,所以這時這一行新加的記錄裡面的列 i 將會是2。
也就是select * from #t 的結果,會是 2 , three 。
這個問題想說明,TRUNCATE 與 DELETE 的分別:TRUNCATE 會復位自增長列的計數器,而DELETE不會。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616352/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL truncate 、delete與drop區別SQLdelete
- Diffrence Between delete and truncatedelete
- truncate 比 delete 慢delete
- drop、delete 與truncatedelete
- 詳解SQL中drop、delete和truncate的異同SQLdelete
- truncate delete drop 區別delete
- truncate delete 的區別delete
- 簡述truncate、delete和dropdelete
- Truncate,Delete,Drop的比較.delete
- truncate與delete的區別delete
- truncate 比 delete 慢的原因。delete
- truncate和delete 的區別delete
- [轉][資料庫SQL語句]truncate/delete/drop同與不同資料庫SQLdelete
- oracle truncate 與 delete 的區別Oracledelete
- truncate,delete,drop的異同點delete
- truncate 和 delete 的效能對比delete
- delete和truncate刪除的區別delete
- Oracle中truncate和delete的區別Oracledelete
- 深入解析delete和truncate不同之處:delete
- HWM和delete,drop,truncate的關係delete
- truncate,delete,drop的異同點(原)delete
- 關於delete,drop,truncate的問題delete
- 資料庫:drop、truncate、delete的區別資料庫delete
- SQLSERVER 的 truncate 和 delete 有區別嗎?SQLServerdelete
- MySQL和Oracle中的delete,truncate對比MySqlOracledelete
- zt_orafaq_delete與truncate的區別delete
- 轉:malloc VS new, free VS deletedelete
- Oracle中truncate和delete的區別(例項)Oracledelete
- mv complate重新整理時使用DELETE OR TRUNCATE!delete
- SQL__DELETESQLdelete
- oracle恢復表delete/truncate/drop的方法總結Oracledelete
- Truncate table 詳解及與delete,drop 的區別delete
- delete/truncate刪除資料索引空間問題delete索引
- Truncate table詳解及與delete,drop的區別delete
- 資料庫關鍵詞 drop、truncate和delete的用法資料庫delete
- truncate和不帶where子句的delete, 以及drop區別delete
- 【SQL】11 SQL DELETE 語句SQLdelete
- 執行truncate在pl/sqlSQL