刪除表之delete drop truncate

2021-08-23 15:17:07 字數 1197 閱讀 8568

[size=small][color=red]相同點: [/color]

truncate和不帶where子句的delete, 以及drop都會刪除表內的資料

[color=red]不同點: [/color]

1. truncate和 delete只刪除資料不刪除表的結構(定義)

drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該錶的儲存過程/函式將保留,但是變為invalid狀態.

2.delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.

truncate,drop是ddl, 操作立即生效,原資料不放到rollback segment中,不能回滾. 操作不觸發trigger.

3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動

顯然drop語句將表所占用的空間全部釋放

truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始).

4.速度,一般來說: drop>; truncate >; delete

5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.

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

想刪除表,當然用drop

想保留表而將所有資料刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete.

如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新匯入/插入資料

6.使用方法:drop table tablename,delete from tablename,truncate table tablename

[color=blue]總結:

1、delete和truncate只刪除表中資料,而drop刪除表

2、速度上drop>; truncate >; delete

3、drop和truncate無備份,delete有備份可回滾[/color]

[color=blue]also see: [truncate 命令用法][/color][/size]

刪除鍊錶之two star programming

最近偶爾看到一篇關於linus torvalds的訪問,大神說大部分人都不理解指標。假設被要求寫一段鍊錶刪除節點的程式,大多數的做法都是跟蹤兩個指標,當前指標cur和其父節點pre,這種實現很容易理解,但是並沒有用到指標的精髓。linus是怎麼寫的呢,且看源 鍊錶之two star programm...

刪除海量資料之全表刪除與部分刪除

刪除海量資料時,如果想要提公升效能,需要考慮的乙個重要因素就是 如何減少日誌操作?1.全表刪除 全表刪除的方式通常有3種 drop,truncate,delete 1 drop truncate drop和truncate是ddl操作,日誌量都很少 只有 資料頁的記錄,不記錄頁內每條資料的明細 都釋...

sql建立表之級聯刪除

直接上 這個世界上沒有一段 不能解釋的事,如果有,那就兩段.use studentdb go create table student sid varchar 20 primary key sname varchar 20 sclass varchar 20 s varchar 10 sscore ...