Truncate是SQL中的一個刪除數(shù)據(jù)表內(nèi)容的語句,用法是:
TRUNCATE TABLE [Table Name]。
下面是對Truncate語句在MSSQLServer2000中用法和原理的說明:
Truncate table 表名 速度快,而且效率高,因為:
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務日志資源少。
DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務日志中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標識所用的計數(shù)值重置為該列的種子。如果想保留標識計數(shù)值,請改用 DELETE。如果要刪除表定義及其數(shù)據(jù),請使用 DROP TABLE 語句。
對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。
TRUNCATE TABLE 不能用于參與了索引視圖的表。
FeedBack:
# Oracle 中truncate與delete的區(qū)別
2009-06-18 12:46 | 末日風情
1、 在功能上,truncate是清空一個表的內(nèi)容,它相當于delete from table_name。
2、delete是dml操作,truncate是ddl操作;因此,用delete刪除整個表的數(shù)據(jù)時,會產(chǎn)生大量的roolback,占用很多的rollback segments, 而truncate不會。
3、在內(nèi)存中,用delete刪除數(shù)據(jù),表空間中其被刪除數(shù)據(jù)的表占用的空間還在,便于以后的使用,另外它是“假相”的刪除,相當于windows中用delete刪除數(shù)據(jù)是把數(shù)據(jù)放到回收站中,還可以恢復,當然如果這個時候重新啟動系統(tǒng)(OS或者RDBMS),它也就不能恢復了!
而用truncate清除數(shù)據(jù),內(nèi)存中表空間中其被刪除數(shù)據(jù)的表占用的空間會被立即釋放,相當于windows中用shift+delete刪除數(shù)據(jù),不能夠恢復!
4、truncate 調(diào)整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默認)delete 則不可以。
5、truncate 只能對TABLE,delete 可以是table,view,synonym。
6、TRUNCATE TABLE 的對象必須是本模式下的,或者有drop any table的權限 而 DELETE 則是對象必須是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的權限。
7、在外層中,truncate或者delete后,其占用的空間都將釋放。
8、truncate和delete只刪除數(shù)據(jù),而drop則刪除整個表(結(jié)構(gòu)和數(shù)據(jù))。
回復 更多評論
2、delete是dml操作,truncate是ddl操作;因此,用delete刪除整個表的數(shù)據(jù)時,會產(chǎn)生大量的roolback,占用很多的rollback segments, 而truncate不會。
3、在內(nèi)存中,用delete刪除數(shù)據(jù),表空間中其被刪除數(shù)據(jù)的表占用的空間還在,便于以后的使用,另外它是“假相”的刪除,相當于windows中用delete刪除數(shù)據(jù)是把數(shù)據(jù)放到回收站中,還可以恢復,當然如果這個時候重新啟動系統(tǒng)(OS或者RDBMS),它也就不能恢復了!
而用truncate清除數(shù)據(jù),內(nèi)存中表空間中其被刪除數(shù)據(jù)的表占用的空間會被立即釋放,相當于windows中用shift+delete刪除數(shù)據(jù),不能夠恢復!
4、truncate 調(diào)整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默認)delete 則不可以。
5、truncate 只能對TABLE,delete 可以是table,view,synonym。
6、TRUNCATE TABLE 的對象必須是本模式下的,或者有drop any table的權限 而 DELETE 則是對象必須是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的權限。
7、在外層中,truncate或者delete后,其占用的空間都將釋放。
8、truncate和delete只刪除數(shù)據(jù),而drop則刪除整個表(結(jié)構(gòu)和數(shù)據(jù))。
回復 更多評論
2009-06-18 12:46 | 末日風情
注意:這里說的delete是指不帶where子句的delete語句
相同點:truncate和不帶where子句的delete, 以及drop都會刪除表內(nèi)的數(shù)據(jù)
不同點:
1. truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop語句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴于該表的存儲過程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
2.delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;如果有相應的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).
truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動
顯然drop語句將表所占用的空間全部釋放
truncate 語句缺省情況下將空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始).
4.速度,一般來說: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想刪除部分數(shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用drop
想保留表而將所有數(shù)據(jù)刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發(fā)trigger,還是用delete.
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數(shù)據(jù)
回復 更多評論
相同點:truncate和不帶where子句的delete, 以及drop都會刪除表內(nèi)的數(shù)據(jù)
不同點:
1. truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop語句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴于該表的存儲過程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
2.delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;如果有相應的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).
truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動
顯然drop語句將表所占用的空間全部釋放
truncate 語句缺省情況下將空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始).
4.速度,一般來說: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想刪除部分數(shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用drop
想保留表而將所有數(shù)據(jù)刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發(fā)trigger,還是用delete.
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數(shù)據(jù)
回復 更多評論
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
31 | 1 | 2 | 3 | 4 | 5 | 6 | |||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 | 1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
常用鏈接
留言簿(4)
隨筆分類
- AJAX(2)
- CSS(4)
- freemarker
- hibernate
- HTML/XML(6)
- Jasper Report(1)
- javascript(26)
- java編程(20)
- JSP基礎(4)
- oracle(18)
- spring(1)
- struts(3)
- 其他(13)
- 架構(gòu)設計(2)
- 編碼規(guī)范
- 設計模式(1)
隨筆檔案
- 2012年8月 (1)
- 2011年4月 (2)
- 2011年2月 (2)
- 2010年8月 (9)
- 2010年7月 (1)
- 2009年11月 (2)
- 2009年10月 (3)
- 2009年9月 (11)
- 2009年8月 (4)
- 2009年6月 (7)
- 2008年12月 (1)
- 2008年10月 (3)
- 2008年8月 (4)
- 2008年7月 (1)
- 2008年6月 (2)
- 2008年4月 (2)
- 2008年3月 (1)
- 2008年2月 (1)
- 2008年1月 (3)
- 2007年12月 (15)
- 2007年11月 (14)
- 2007年10月 (12)
- 2007年8月 (2)
搜索
最新評論

- 1.?re: Blowfish加密算法之Java實現(xiàn)[未登錄]
- 這個有c語言版沒
- --小丸子
- 2.?re: SSH實現(xiàn)分頁
-
我和上面的一樣,你的分頁很簡單,能否發(fā)一份給我呢?
我的QQ郵箱是511775600@qq.com - --瞇露
- 3.?re: String.equals()和String.equalsIgnoreCase()的區(qū)別
- 觀后感矛
- --和規(guī)劃局
- 4.?re: 時間控件(可含時分秒)
- thank you 樓主
- --yaoj
- 5.?re: 時間控件(可含時分秒)
- 評論內(nèi)容較長,點擊標題查看
- --末日風情