sql刪除語句的區別

2021-08-14 16:24:10 字數 1543 閱讀 8266

相同點:

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

2.drop、truncate都是ddl語句(資料定義語言),執行後會自動提交。

不同點:

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.delete是dml語句,不會自動提交。drop/truncate都是ddl語句,執行後會自動提交。

7、truncate   table   在功能上與不帶   where   子句的   delete   語句相同:二者均刪除表中的全部行。但   truncate   table   比   delete   速度快,且使用的系統和事務日誌資源少。delete   語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。truncate   table   通過釋放儲存表資料所用的資料頁來刪除資料,並且只在事務日誌中記錄頁的釋放。 

8、truncate   table   刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用   delete。如果要刪除表定義及其資料,請使用   drop   table   語句。  

9、對於由   foreign   key   約束引用的表,不能使用   truncate   table,而應使用不帶   where   子句的   delete   語句。由於   truncate   table   不記錄在日誌中,所以它不能啟用觸發器。    

10、truncate   table   不能用於參與了索引檢視的表。  

SQL刪除語句

如果我們要刪除資料庫中表的資料,我們就可以使用delete語句。delete語句的基本語法是 delete from 表名 where 例如,我們想刪除employees表中id 100的記錄,就需要這麼寫 delete from employees where employee id 100 查詢...

SQL刪除語句用法

一 drop 語法 drop table tablename 作用 刪除內容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增資料是不可能的,除非新增乙個表 二 truncate 語法 truncate table tablename 作用 刪除內容 釋放空間但不刪除定義。與drop不同的是,他...

SQL語句級聯刪除

如果想刪除主表的時候同時刪除字表資料,可以在建立外來鍵時設定on delete cascade 但是需要注意的是,這樣是比較危險的,盡量在業務中用程式控制刪除。create table a and b 主表 create table department dept id number 4 not n...