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會刪除表中的所有數(shù)據(jù)、釋放空間,但是保留表結(jié)構(gòu)
- 只能操作表,不能與where一起使用
- truncate刪除操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能rollback,操作不觸發(fā)trigger
- truncate刪除數(shù)據(jù)后會釋放表空間、重置Identity(標(biāo)識列、自增字段),相當(dāng)于自增列會被置為初始值,又重新從1開始記錄、而非接著原來的id數(shù)
- truncate刪除數(shù)據(jù)后不寫服務(wù)器log,整體刪除速度快
1.2 刪除表:drop
- sql命令
drop table table_name; drop table if exists table_name;
注意:
- drop會刪除整個表,包括表結(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),同時也不釋放表空間 delete from tb_name;
注意:
- 刪除表中數(shù)據(jù)而不刪除表結(jié)構(gòu),也不釋放空間
- delete可以刪除一行、多行、乃至整張表
- 每次刪除一行,都在事務(wù)日志中為所刪除的每行記錄一項,可回滾
- 如果不加where條件,表示刪除表中所有數(shù)據(jù),僅刪除數(shù)據(jù)、保留表結(jié)構(gòu),同時也不釋放表空間
MySQL、Mariadb、PostgreSQL刪除表數(shù)據(jù)、清空表命令 都可用以上三種命令。
二、使用原則
使用原則總結(jié)如下:
- 當(dāng)你不需要該表時(刪除數(shù)據(jù)和結(jié)構(gòu)),用drop;
- 當(dāng)你仍要保留該表、僅刪除所有數(shù)據(jù)表內(nèi)容時,用truncate;
- 當(dāng)你要刪除部分記錄、且希望能回滾的話,用delete;
在沒有備份的情況下,謹(jǐn)慎使用drop、truncate。
在實際應(yīng)用中,要根據(jù)具體需求和場景選擇合適的操作。
三、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
:刪除整個表,包括表結(jié)構(gòu)和數(shù)據(jù),釋放空間。它是一種DDL操作,但不同于truncate,它會釋放表所占用的空間。
2.數(shù)據(jù)刪除方式
truncate
:刪除表中的所有數(shù)據(jù),但不會刪除表結(jié)構(gòu)。適用于需要保留表結(jié)構(gòu)的情況。delete
:刪除表中的特定數(shù)據(jù),可以根據(jù)條件刪除,表的結(jié)構(gòu)和約束保持不變。適用于需要根據(jù)特定條件刪除數(shù)據(jù)的情況。drop
:刪除整個表,包括表結(jié)構(gòu)和數(shù)據(jù)。適用于不再需要表結(jié)構(gòu)的情況。
3.執(zhí)行速度:drop > truncate > delete
truncate
:執(zhí)行速度較快,因為它一次性刪除所有數(shù)據(jù),過釋放表的存儲空間來刪除數(shù)據(jù),并將表重置為初始狀態(tài)。delete
:執(zhí)行速度較慢,因為它需要逐行刪除數(shù)據(jù),并且會生成大量的事務(wù)日志,同時也不釋放空間。drop
:執(zhí)行速度較快,因為它一次性刪除整個表。
4.回滾能力
truncate
:不可回滾,一旦執(zhí)行,數(shù)據(jù)將被永久刪除、無法恢復(fù)。delete
:可以回滾,使用ROLLBACK語句可以撤銷刪除操作。drop
:不可回滾,一旦執(zhí)行,表結(jié)構(gòu)和數(shù)據(jù)都將被永久刪除。
5.觸發(fā)器
truncate
:不會觸發(fā)觸發(fā)器。delete
:會觸發(fā)觸發(fā)器。drop
:不會觸發(fā)觸發(fā)器,因為它是刪除整個表。
總結(jié)
- 如果您需要快速刪除整個表中的數(shù)據(jù),但保留表結(jié)構(gòu),可以選擇truncate。
- 如果您需要刪除特定行的數(shù)據(jù),可以根據(jù)條件刪除,可以選擇delete。
- 如果您需要刪除整個表,包括表結(jié)構(gòu)和數(shù)據(jù),可以選擇drop。
- 在實際應(yīng)用中,要根據(jù)具體需求和場景選擇合適的操作。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- MySQL刪除表三種操作及delete、truncate、drop語句的區(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中drop、truncate與delete的區(qū)別詳析
- MySQL刪除表操作實現(xiàn)(delete、truncate、drop的區(qū)別)
- 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實現(xiàn)mysql從零開始
- 淺談MySQL中drop、truncate和delete的區(qū)別
相關(guān)文章
關(guān)于MySQL中“Insert into select“ 的死鎖情況分析
這篇文章主要介紹了關(guān)于MySQL中“Insert into select“ 的死鎖情況分析,死鎖是指兩個或者多個事務(wù)在同一資源上的相互占用,并請求鎖定對方占用的資源,從而導(dǎo)致惡性循環(huán)的現(xiàn)象,需要的朋友可以參考下2023-05-05MySQL中查看表結(jié)構(gòu)的四種實現(xiàn)
本文主要介紹了MySQL中查看表結(jié)構(gòu)的四種實現(xiàn),包含DESCRIBE/DESC、SHOW COLUMNS、SHOW CREATE TABLE和INFORMATION_SCHEMA,具有一定的參考價值,感興趣的可以了解一下2025-02-02Mysql樹形結(jié)構(gòu)的數(shù)據(jù)庫表設(shè)計方案
樹形結(jié)構(gòu)對大家來說應(yīng)該都不陌生,在日常開發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了關(guān)于Mysql樹形結(jié)構(gòu)的數(shù)據(jù)庫表設(shè)計的相關(guān)資料,文中通過示例代碼的非常詳細(xì),需要的朋友可以參考下2021-09-09