MySQL刪除表數(shù)據(jù)、清空表命令詳解(truncate、drop、delete區(qū)別)
一、MySQL清空表數(shù)據(jù)三種方法
1.1 清空表數(shù)據(jù):truncate
- sql命令
#清空多張表、庫中所有表的數(shù)據(jù) truncate table table_name1,table_name2,...; #清空單張表的數(shù)據(jù) truncate table table_name;
注意:
- truncate會(huì)刪除表中的所有數(shù)據(jù)、釋放空間,但是保留表結(jié)構(gòu)
- 只能操作表,不能與where一起使用
- truncate刪除操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能rollback,操作不觸發(fā)trigger
- truncate刪除數(shù)據(jù)后會(huì)釋放表空間、重置Identity(標(biāo)識(shí)列、自增字段),相當(dāng)于自增列會(huì)被置為初始值,又重新從1開始記錄、而非接著原來的id數(shù)
- truncate刪除數(shù)據(jù)后不寫服務(wù)器log,整體刪除速度快
1.2 刪除表:drop
- sql命令
drop table table_name; drop table if exists table_name;
注意:
- drop會(huì)刪除整個(gè)表,包括表結(jié)構(gòu)和數(shù)據(jù),釋放空間
- 立即執(zhí)行,執(zhí)行速度最快
- 不可回滾
1.3 刪除/清空表數(shù)據(jù):delete
- sql命令
#刪除部分?jǐn)?shù)據(jù) delete from tb_name where clause; #清空表,僅刪除數(shù)據(jù)、保留表結(jié)構(gòu),同時(shí)也不釋放表空間 delete from tb_name;
注意:
- 刪除表中數(shù)據(jù)而不刪除表結(jié)構(gòu),也不釋放空間
- delete可以刪除一行、多行、乃至整張表
- 每次刪除一行,都在事務(wù)日志中為所刪除的每行記錄一項(xiàng),可回滾
- 如果不加where條件,表示刪除表中所有數(shù)據(jù),僅刪除數(shù)據(jù)、保留表結(jié)構(gòu),同時(shí)也不釋放表空間
MySQL、Mariadb、PostgreSQL刪除表數(shù)據(jù)、清空表命令 都可用以上三種命令。
二、使用原則
使用原則總結(jié)如下:
- 當(dāng)你不需要該表時(shí)(刪除數(shù)據(jù)和結(jié)構(gòu)),用drop;
- 當(dāng)你仍要保留該表、僅刪除所有數(shù)據(jù)表內(nèi)容時(shí),用truncate;
- 當(dāng)你要?jiǎng)h除部分記錄、且希望能回滾的話,用delete;
在沒有備份的情況下,謹(jǐn)慎使用drop、truncate。
在實(shí)際應(yīng)用中,要根據(jù)具體需求和場(chǎng)景選擇合適的操作。
三、truncate、drop、delete區(qū)別
truncate、delete和drop都是用于刪除數(shù)據(jù)或表的操作,但它們之間有一些關(guān)鍵的區(qū)別:
1.操作類型
truncate:刪除表中的所有數(shù)據(jù),保留表結(jié)構(gòu),釋放空間。它是一種DDL(數(shù)據(jù)定義語言)操作,執(zhí)行速度較快。delete:刪除表中的特定行,可以逐行刪除,保留表結(jié)構(gòu),也不釋放空間。它是一種DML(數(shù)據(jù)操作語言)操作,執(zhí)行速度較慢。drop:刪除整個(gè)表,包括表結(jié)構(gòu)和數(shù)據(jù),釋放空間。它是一種DDL操作,但不同于truncate,它會(huì)釋放表所占用的空間。
2.數(shù)據(jù)刪除方式
truncate:刪除表中的所有數(shù)據(jù),但不會(huì)刪除表結(jié)構(gòu)。適用于需要保留表結(jié)構(gòu)的情況。delete:刪除表中的特定數(shù)據(jù),可以根據(jù)條件刪除,表的結(jié)構(gòu)和約束保持不變。適用于需要根據(jù)特定條件刪除數(shù)據(jù)的情況。drop:刪除整個(gè)表,包括表結(jié)構(gòu)和數(shù)據(jù)。適用于不再需要表結(jié)構(gòu)的情況。
3.執(zhí)行速度:drop > truncate > delete
truncate:執(zhí)行速度較快,因?yàn)樗淮涡詣h除所有數(shù)據(jù),過釋放表的存儲(chǔ)空間來刪除數(shù)據(jù),并將表重置為初始狀態(tài)。delete:執(zhí)行速度較慢,因?yàn)樗枰鹦袆h除數(shù)據(jù),并且會(huì)生成大量的事務(wù)日志,同時(shí)也不釋放空間。drop:執(zhí)行速度較快,因?yàn)樗淮涡詣h除整個(gè)表。
4.回滾能力
truncate:不可回滾,一旦執(zhí)行,數(shù)據(jù)將被永久刪除、無法恢復(fù)。delete:可以回滾,使用ROLLBACK語句可以撤銷刪除操作。drop:不可回滾,一旦執(zhí)行,表結(jié)構(gòu)和數(shù)據(jù)都將被永久刪除。
5.觸發(fā)器
truncate:不會(huì)觸發(fā)觸發(fā)器。delete:會(huì)觸發(fā)觸發(fā)器。drop:不會(huì)觸發(fā)觸發(fā)器,因?yàn)樗莿h除整個(gè)表。
總結(jié)
- 如果您需要快速刪除整個(gè)表中的數(shù)據(jù),但保留表結(jié)構(gòu),可以選擇truncate。
- 如果您需要?jiǎng)h除特定行的數(shù)據(jù),可以根據(jù)條件刪除,可以選擇delete。
- 如果您需要?jiǎng)h除整個(gè)表,包括表結(jié)構(gòu)和數(shù)據(jù),可以選擇drop。
- 在實(shí)際應(yīng)用中,要根據(jù)具體需求和場(chǎng)景選擇合適的操作。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實(shí)現(xiàn)mysql從零開始
- MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)
- MySQL刪除表三種操作及delete、truncate、drop語句的區(qū)別
- MySQL中drop、truncate和delete的區(qū)別小結(jié)
- mysql中drop、truncate與delete的區(qū)別詳析
- MySQL兩種刪除用戶語句的區(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利用索引優(yōu)化ORDER BY排序語句的方法
這篇文章主要介紹了MySQL利用索引優(yōu)化ORDER BY排序語句的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-10-10
MySQL數(shù)據(jù)庫中的TRUNCATE?TABLE命令詳解
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫中TRUNCATE?TABLE命令的相關(guān)資料,Truncate Table“清空表”的意思,它對(duì)數(shù)據(jù)庫中的表進(jìn)行清空操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
Datagrip2020下載MySQL驅(qū)動(dòng)失敗的問題
這篇文章主要介紹了Datagrip2020下載MySQL驅(qū)動(dòng)失敗的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
MYSQL命令行導(dǎo)入導(dǎo)出數(shù)據(jù)庫詳解
這篇文章主要詳細(xì)介紹了MYSQL命令行進(jìn)行導(dǎo)入導(dǎo)出數(shù)據(jù)庫操作的方法,并且分win系統(tǒng)和Linux系統(tǒng)介紹了mysql備份和還原的方法,非常的詳細(xì),希望對(duì)大家能有所幫助2014-09-09

