資料庫中truncate、delete、drop三種刪除的區別
阿新 • • 發佈:2018-12-14
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不記錄在日誌中,所以它不能啟用觸發器。