1. 程式人生 > >資料庫中truncate、delete、drop三種刪除的區別

資料庫中truncate、delete、drop三種刪除的區別

delete:delete from 表名 where ****

delete可以刪除行資料,也可以對整表資料刪除,一般與where關聯使用。delete刪除內容,釋放內容空間,但是表結構和表定義不刪除。

truncate:truncate table 表名

truncate只清除表中的內容,釋放內容所佔空間,但是表結構和表定義不刪除。其次truncate不能刪除行資料,比delete刪除的徹底。

drop:drop table 表名

drop刪除資料和定義,釋放空間,它會將表的結構也一起刪除掉。

更多細節

1、delete每次刪除一行時,都會將該行的刪除操作作為事務記錄在日誌中

。以便進行回滾操作。

2、執行速度:drop > truncate > delete:因為delete每執行一次,都要在事務日誌中記錄一次。所以最慢

3、delete語句是資料庫操作語言(dml),這個操作會放到rollback segement(回滾分段)中,事務提交以後才會生效,若有相應的trigger(觸發),執行的時候將被觸發。

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

5、truncate語句執行以後,id標識還是按照順序排列,保持連續;而delete語句執行後,id標識不連續。

注意事項

1、由於truncate、drop立即生效,不能回滾,所以謹慎使用。

2、採用delete刪除資料時,和where連用最保險,且要有足夠大的回滾段,防止刪除錯誤資料好及時恢復。

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