關於sql中drop、truncate、delete的探討

SQL中有三種刪除數據的方式,分別是:

1. 使用truncate

TRUNCATEtable [表名稱]

這個語句用來刪除整個表的數據內容,但表本身的結構還是保存下來的,包括表的定義、索引的定義等,都還保留着。看起來,這種方式是用來清理數據庫內容的。

 

2.使用delete

DELETE FROM 表名稱  WHERE 列名稱=值 #用於刪除特定的行
DELETE FROM 表名稱  #用於刪除整個表的數據

 

3. 使用drop

DROP Table 表名稱

DROP方式刪除表,會將表本身也刪除掉。比如 ,有一個Person表,你想清理裏面的內容,用了DROP語句,則會把這個表也刪除,下次你再insert一個Person記錄,則會報表不存在的錯誤。但如果你改用truncate、delete,則不會有這個問題。

 

 

以下談談這三種方式的區別。

1. truncate、drop 是DDL語句,什麼是DDL、DML語句?這個可自行搜索。有個重點,DDL語句是不能回滾的。因此,如果是使用truncate語句刪除數據庫表中的內容,則馬上會生效,不用提交,也無法回滾,這點要切記!!!另外,truncate也不能帶where條件,也就是說,truncate是用來刪除整個表的數據內容的。 

2. delete 語句是DML語句,支持回滾,在執行完delete後,還需要再執行commit纔會生效。

3. 對於高水位(Hihg water mark)的影響。

HWM這個概念似乎只有oracle纔有,如果mysql也有的話,麻煩大家指出。

按oracle官方文檔的意思如下:

To manage space, Oracle Database tracks the state of blocks in the segment. The high water mark (HWM) is the point in a segment beyond which data blocks are unformatted and have never been used.

HWM 用來說明數據庫的使用情況,可以理解成數據庫最多使用過多少數據塊。HWM只增不減,有點類似水庫的歷史最高水位。

如果是使用DROP,則表直接刪了,也就無所謂存在HWM了。

用DELETE語句,HWM不會改變

用TRUNCATE,HWM會復位成0

 

4. 在執行速度上,drop> truncate > delete。這是一般情況,具體情況還得具體分析。

 

以上即是這三種刪除方式的區別。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章