詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實(shí)現(xiàn)mysql從零開(kāi)始
更新時(shí)間:2008年04月19日 10:16:19 作者:
注意:這里說(shuō)的delete是指不帶where子句的delete語(yǔ)句
相同點(diǎn):
truncate和不帶where子句的delete, 以及drop都會(huì)刪除表內(nèi)的數(shù)據(jù)
不同點(diǎn):
1. truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop語(yǔ)句將刪除表的結(jié)構(gòu)被依賴(lài)的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴(lài)于該表的
存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
2.delete語(yǔ)句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;如果有相應(yīng)的trigger,
執(zhí)行的時(shí)候?qū)⒈挥|發(fā).
truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)
trigger.
3.delete語(yǔ)句不影響表所占用的extent, 高水線(xiàn)(high watermark)保持原位置不動(dòng)
顯然drop語(yǔ)句將表所占用的空間全部釋放
truncate 語(yǔ)句缺省情況下見(jiàn)空間釋放到 minextents個(gè) extent,除非使用reuse storage; truncate
會(huì)將高水線(xiàn)復(fù)位(回到最開(kāi)始).
4.速度,一般來(lái)說(shuō): drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其沒(méi)有備份的時(shí)候.否則哭都來(lái)不及.
使用上,想刪除部分?jǐn)?shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當(dāng)然用drop
想保留表而將所有數(shù)據(jù)刪除. 如果和事務(wù)無(wú)關(guān),用truncate即可. 如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還
是用delete.
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)/
實(shí)際應(yīng)用:
delete from table; //刪除所有數(shù)據(jù)
truncate table; //將auto_increatement調(diào)制從0開(kāi)始,實(shí)際就是從1開(kāi)始
1. truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop語(yǔ)句將刪除表的結(jié)構(gòu)被依賴(lài)的約束(constrain),觸發(fā)器(trigger),索引(index); 依賴(lài)于該表的
存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
2.delete語(yǔ)句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;如果有相應(yīng)的trigger,
執(zhí)行的時(shí)候?qū)⒈挥|發(fā).
truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)
trigger.
3.delete語(yǔ)句不影響表所占用的extent, 高水線(xiàn)(high watermark)保持原位置不動(dòng)
顯然drop語(yǔ)句將表所占用的空間全部釋放
truncate 語(yǔ)句缺省情況下見(jiàn)空間釋放到 minextents個(gè) extent,除非使用reuse storage; truncate
會(huì)將高水線(xiàn)復(fù)位(回到最開(kāi)始).
4.速度,一般來(lái)說(shuō): drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其沒(méi)有備份的時(shí)候.否則哭都來(lái)不及.
使用上,想刪除部分?jǐn)?shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當(dāng)然用drop
想保留表而將所有數(shù)據(jù)刪除. 如果和事務(wù)無(wú)關(guān),用truncate即可. 如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還
是用delete.
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)/
實(shí)際應(yīng)用:
delete from table; //刪除所有數(shù)據(jù)
truncate table; //將auto_increatement調(diào)制從0開(kāi)始,實(shí)際就是從1開(kāi)始
您可能感興趣的文章:
- MySQL刪除表數(shù)據(jù)、清空表命令詳解(truncate、drop、delete區(qū)別)
- MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)
- MySQL刪除表三種操作及delete、truncate、drop語(yǔ)句的區(qū)別
- MySQL中drop、truncate和delete的區(qū)別小結(jié)
- mysql中drop、truncate與delete的區(qū)別詳析
- MySQL兩種刪除用戶(hù)語(yǔ)句的區(qū)別(delete user和drop user)
- MySQL刪除數(shù)據(jù)用法及區(qū)別詳解(DELETE、TRUNCATE?和?DROP)
- mysql中的delete,drop和truncate有什么區(qū)別
- 淺談MySQL中drop、truncate和delete的區(qū)別
- MySQL數(shù)據(jù)清除三劍客之DROP、DELETE與TRUNCATE深度對(duì)比指南
相關(guān)文章
mysql中插入隨機(jī)字符串?dāng)?shù)據(jù)及常見(jiàn)問(wèn)題說(shuō)明
這篇文章主要介紹了mysql中插入隨機(jī)字符串?dāng)?shù)據(jù)及常見(jiàn)問(wèn)題說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Mysql:The user specified as a definer (''xxx@''%'') does not
今天小編就為大家分享一篇關(guān)于Mysql:The user specified as a definer ('xxx@'%') does not exist的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
深入解析MYSQL 常用數(shù)值函數(shù)和條件函數(shù)
這篇文章主要介紹了MYSQL 常用數(shù)值函數(shù)和條件函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-04-04
MySQL 橫向衍生表(Lateral Derived Tables)的實(shí)現(xiàn)
橫向衍生表適用于在需要通過(guò)子查詢(xún)獲取中間結(jié)果集的場(chǎng)景,相對(duì)于普通衍生表,橫向衍生表可以引用在其之前出現(xiàn)過(guò)的表名,本文就來(lái)介紹一下MySQL 橫向衍生表(Lateral Derived Tables)的實(shí)現(xiàn),感興趣的可以了解一下2025-06-06

