mysql中drop、truncate與delete的區(qū)別詳析
1. drop:刪除數(shù)據(jù)庫(kù)
- drop語(yǔ)句將表所占用的空間全釋放掉。
- drop > truncate > delete
方式1:如果要?jiǎng)h除的數(shù)據(jù)庫(kù)存在,則刪除成功。如果不存在,則報(bào)錯(cuò)
DROP DATABASE mytest1;
方式2:推薦。 如果要?jiǎng)h除的數(shù)據(jù)庫(kù)存在,則刪除成功。如果不存在,則默默結(jié)束,不會(huì)報(bào)錯(cuò)。
DROP DATABASE IF EXISTS mytest1;
2. 對(duì)比 TRUNCATE TABLE 和 DELETE FROM
相同點(diǎn):都可以實(shí)現(xiàn)對(duì)表中所有數(shù)據(jù)的刪除,同時(shí)保留表結(jié)構(gòu)。
不同點(diǎn):
- TRUNCATE TABLE:一旦執(zhí)行此操作,表數(shù)據(jù)全部清除。同時(shí),數(shù)據(jù)是不可以回滾的。
- DELETE FROM:一旦執(zhí)行此操作,表數(shù)據(jù)可以全部清除(不帶WHERE)。同時(shí),數(shù)據(jù)是可以實(shí)現(xiàn)回滾的。
3. DDL 和 DML 的說(shuō)明
① DDL(CREATE 、 DROP 、 ALTER、TRUNCATE 等)的操作一旦執(zhí)行,就不可回滾。指令SET autocommit = FALSE對(duì)DDL操作失效。(因?yàn)樵趫?zhí)行完DDL操作之后,一定會(huì)執(zhí)行一次COMMIT。而此COMMIT操作不受 SETautocommit = FALSE影響。)
② DML(INSERT 、 DELETE 、 UPDATE 、 SELECT等)的操作默認(rèn)情況,一旦執(zhí)行,也是不可回滾的。但是,如果在執(zhí)行DML之前,執(zhí)行了 SET autocommit = FALSE,則執(zhí)行的DML操作就可以實(shí)現(xiàn)回滾。
演示1:DELETE FROM 刪除數(shù)據(jù)后,恢復(fù)數(shù)據(jù)

SET autocommit = FALSE;

DELETE FROM myemp3;

查詢后數(shù)據(jù)為空

回滾數(shù)據(jù)

再次查詢,可以看到恢復(fù)數(shù)據(jù)了

演示2:TRUNCATE TABLE,不能回滾數(shù)據(jù)操作

SET autocommit = FALSE;

TRUNCATE TABLE myemp3;

清空了數(shù)據(jù)

回滾事物
rollback

查詢后數(shù)據(jù)并沒(méi)有恢復(fù)

4.效率對(duì)比
在速度上,一般來(lái)說(shuō),drop> truncate > delete。
- 如果想刪除部分?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ù)。
- truncate與drop是DDL語(yǔ)句,執(zhí)行后無(wú)法回滾;delete是DML語(yǔ)句,可回滾。
- truncate只能作用于表;delete,drop可作用于表、視圖等。
- truncate會(huì)清空表中的所有行,但表結(jié)構(gòu)及其約束、索引等保持不變;drop會(huì)刪除表的結(jié)構(gòu)及其所依賴的約束、索引等。
- truncate會(huì)重置表的自增值;delete不會(huì)。
- truncate不會(huì)激活與表有關(guān)的刪除觸發(fā)器;delete可以。
- truncate后會(huì)使表和索引所占用的空間會(huì)恢復(fù)到初始大?。籨elete操作不會(huì)減少表或索引所占用的空間,drop語(yǔ)句將表所占用的空間全釋放掉。
總結(jié)
到此這篇關(guān)于mysql中drop、truncate與delete區(qū)別的文章就介紹到這了,更多相關(guān)mysql drop、truncate和delete區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL刪除表三種操作及delete、truncate、drop語(yǔ)句的區(qū)別
- MySQL刪除表數(shù)據(jù)、清空表命令詳解(truncate、drop、delete區(qū)別)
- MySQL中drop、truncate和delete的區(qū)別小結(jié)
- DELETE、TRUNCATE 和 DROP 在MySQL中的區(qū)別及功能使用示例
- mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)
- MySQL深入詳解delete與Truncate及drop的使用區(qū)別
- mysql中的delete,drop和truncate有什么區(qū)別
- MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)
- 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實(shí)現(xiàn)mysql從零開(kāi)始
- 淺談MySQL中drop、truncate和delete的區(qū)別
相關(guān)文章
MySQL中建表與常見(jiàn)的類型設(shè)計(jì)陷阱詳解
這篇文章詳細(xì)講解了MySQL的建表語(yǔ)句、以及表結(jié)構(gòu)的設(shè)計(jì)規(guī)范和陷阱,并對(duì)網(wǎng)絡(luò)上常見(jiàn)的資料給出的設(shè)計(jì)方案。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11
使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法
使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法...2006-12-12
MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量
最近在做統(tǒng)計(jì)想查找一個(gè)數(shù)據(jù)庫(kù)里基本所有的表數(shù)據(jù)量,下面這篇文章主要給大家介紹了關(guān)于MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Mysql中正則表達(dá)式Regexp常見(jiàn)用法及說(shuō)明
這篇文章主要介紹了Mysql中正則表達(dá)式Regexp常見(jiàn)用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-12-12
mysql學(xué)習(xí)筆記之基礎(chǔ)知識(shí)
本文是MySQL學(xué)習(xí)筆記系列文章的第一篇,給大家簡(jiǎn)單講解下MySQL的一些檢查操作命令,希望大家能夠喜歡2017-02-02

