在 MySQL 中,刪除操作主要分為 刪除表中的數(shù)據(jù) 和 刪除表 / 數(shù)據(jù)庫本身,需根據(jù)場景選擇合適的語句,操作前務必謹慎(建議先備份數(shù)據(jù))。
用于刪除表中符合條件的記錄,支持事務回滾,適合需要精確刪除部分數(shù)據(jù)的場景。
基本語法:
DELETE FROM 表名 WHERE 條件;
DELETE FROM 表名;
示例:
DELETE FROM users WHERE age > 30;
DELETE FROM orders WHERE status = 'cancelled';
特點:
-
可通過
WHERE 子句指定刪除范圍,若省略 WHERE 則刪除表中所有數(shù)據(jù)(但表結(jié)構(gòu)保留)。
-
操作會被記錄到事務日志,支持
ROLLBACK 回滾(需在事務中執(zhí)行)。
-
刪除大量數(shù)據(jù)時速度較慢(逐行刪除并記錄日志)。
用于快速刪除表中所有數(shù)據(jù),保留表結(jié)構(gòu),但操作不可回滾,適合徹底清空表的場景。
基本語法:
示例:
特點:
-
相當于重新創(chuàng)建表,速度比
DELETE 快(不記錄每行刪除日志)。
-
操作不可回滾(即使在事務中執(zhí)行,提交后也無法恢復)。
-
會重置自增列(如
AUTO_INCREMENT 計數(shù)器歸零)。
徹底刪除表(包括表結(jié)構(gòu)和所有數(shù)據(jù)),操作不可恢復。
語法:
DROP TABLE 表名;
DROP TABLE 表1, 表2;
DROP TABLE IF EXISTS 表名;
示例:
DROP TABLE IF EXISTS temp_data;
徹底刪除整個數(shù)據(jù)庫(包括所有表和數(shù)據(jù)),操作極其危險,需特別謹慎。
語法:
DROP DATABASE 數(shù)據(jù)庫名;
DROP DATABASE IF EXISTS 數(shù)據(jù)庫名;
示例:
DROP DATABASE IF EXISTS test_db;
-
數(shù)據(jù)備份:刪除操作(尤其是
TRUNCATE、DROP)不可逆,執(zhí)行前務必備份關鍵數(shù)據(jù)。
-
權(quán)限控制:確保賬戶有足夠權(quán)限(如
DELETE、DROP 權(quán)限),生產(chǎn)環(huán)境應限制高危操作權(quán)限。
-
事務保護:
DELETE 操作可放在事務中(BEGIN → 執(zhí)行刪除 → 確認無誤后 COMMIT,否則 ROLLBACK)。
-
性能影響:
-
大表執(zhí)行
DELETE 可能鎖表較久,建議分批刪除(配合 LIMIT)。
-
TRUNCATE 和 DROP 操作會立即釋放存儲空間,但可能導致瞬間鎖表。
根據(jù)場景選擇合適的刪除方式,優(yōu)先使用 WHERE 條件精確刪除,避免誤刪重要數(shù)據(jù)。