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。這是一般情況,具體情況還得具體分析。
以上即是這三種刪除方式的區別。