sql中的truncate、 delete 與drop的區別


一、delete 刪除的是數據drop刪除的是,語句如下:

1.刪除字段名

--刪除一個字段
alter table 表名稱 drop column 列名
--刪除多個字段
alter table 表名稱 drop (列名1,列名2...)

2.刪除表

drop table 表名稱

3.刪除數據

語法1

delete from 表名 where 刪除條件

語法2

truncate table 表名稱

二、其他的區別,如下:

delete:

1、delete是DML,執行delete操作時,每次從表中刪除一行,並且同時將該行的的刪除操作記錄在redo和undo表空間中以便進行回滾(rollback)和重做操作,但要注意表空間要足夠大,需要手動提交(commit)操作才能生效,可以通過rollback撤消操作。

2、delete可根據條件刪除表中滿足條件的數據,如果不指定where子句,那么刪除表中所有記錄。

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

drop:

1、drop是DDL,會隱式提交,所以,不能回滾,不會觸發觸發器。

2、drop語句刪除表結構及所有數據,並將表所占用的空間全部釋放。

3、drop語句將刪除表的結構所依賴的約束,觸發器,索引,依賴於該表的存儲過程/函數將保留,但是變為invalid狀態。

truncate

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

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

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

  3. TRUNCATE 只能對TABLE;DELETE可以是table和view

比較 truncat 與 delete 實現數據刪除?

  1. delete 刪除的數據可以 rollback
  2. delete 刪除可能產生碎片,並且不釋放空間
  3. truncate 是先摧毀表結構,再重構表結構

所以:

1、在速度上,一般來說, drop> truncate > delete。

2、在使用drop時一定要注意,雖然可以恢復,但為了減少麻煩,還是要慎重。

3、如果想刪除部分數據用delete,注意帶上where子句,回滾段要足夠大;如果和事務有關,或者想觸發trigger,還是用delete

4、如果想刪除表,當然用drop;

5、 想保留表而將所有數據刪除,如果和事務無關,用truncate即可;如果和事務有關,或者想觸發trigger,還是用delete。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM