MySQL 刪除數(shù)據(jù)詳解(最新整理)
一、前言
在 MySQL 中,可以使用 DELETE、TRUNCATE 和 DROP 語(yǔ)句來(lái)刪除數(shù)據(jù)。這三者雖然都能達(dá)到刪除數(shù)據(jù)的效果,但它們的作用范圍、執(zhí)行效率以及數(shù)據(jù)恢復(fù)能力存在差異。
本文將介紹:
DELETE、TRUNCATE和DROP的用法和區(qū)別DELETE語(yǔ)句的高級(jí)用法- 刪除操作的注意事項(xiàng)和最佳實(shí)踐
二、MySQL 中的三種刪除方式
1.DELETE語(yǔ)句
DELETE 語(yǔ)句用于刪除表中符合條件的數(shù)據(jù)行,不刪除表本身。
? 基本語(yǔ)法:
DELETE FROM 表名 WHERE 條件;
表名:要操作的表名稱(chēng)。WHERE 條件:指定要?jiǎng)h除的記錄,省略則刪除所有記錄。- 不加
WHERE會(huì)刪除表中所有數(shù)據(jù),但表結(jié)構(gòu)仍然保留。
?? 示例:
假設(shè)有以下表 users:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
city VARCHAR(50)
);
-- 插入測(cè)試數(shù)據(jù)
INSERT INTO users (name, age, city) VALUES
('Alice', 25, 'Beijing'),
('Bob', 30, 'Shanghai'),
('Charlie', 35, 'Guangzhou');刪除指定行:
DELETE FROM users WHERE name = 'Bob';
? 結(jié)果:刪除 name='Bob' 的記錄。
刪除所有數(shù)據(jù):
DELETE FROM users;
? 結(jié)果:清空表中數(shù)據(jù),但表結(jié)構(gòu)還在。
刪除多行:
DELETE FROM users WHERE age > 25;
? 結(jié)果:刪除所有年齡大于 25 歲的用戶(hù)。
2.TRUNCATE語(yǔ)句
TRUNCATE 語(yǔ)句用于清空表中的所有數(shù)據(jù),但不會(huì)記錄刪除操作,效率比 DELETE 更高。
? 基本語(yǔ)法:
TRUNCATE TABLE 表名;
- 作用:清空表中的數(shù)據(jù),但保留表結(jié)構(gòu)。
- 效率:比
DELETE快,且釋放表空間。 - 自增 ID 重置:
TRUNCATE會(huì)將AUTO_INCREMENT重置為 1。
?? 示例:
TRUNCATE TABLE users;
? 結(jié)果:
- 清空表數(shù)據(jù)。
id自動(dòng)增長(zhǎng)重置為 1。
3.DROP語(yǔ)句
DROP 語(yǔ)句用于刪除表本身,不僅數(shù)據(jù)被刪除,表結(jié)構(gòu)也會(huì)消失。
? 基本語(yǔ)法:
DROP TABLE 表名;
- 作用:刪除表及其數(shù)據(jù),無(wú)法恢復(fù)。
- 效率:速度快,但不可恢復(fù)。
?? 示例:
DROP TABLE users;
? 結(jié)果:
- 表
users被刪除,數(shù)據(jù)和表結(jié)構(gòu)都不存在。
三、DELETE高級(jí)用法
1. 使用DELETE刪除多表數(shù)據(jù)(多表關(guān)聯(lián)刪除)
在多表關(guān)聯(lián)查詢(xún)時(shí),可以使用 JOIN 刪除多個(gè)表中的數(shù)據(jù)。
? 基本語(yǔ)法:
DELETE 表別名 FROM 表1 AS 別名1 JOIN 表2 AS 別名2 ON 關(guān)聯(lián)條件 WHERE 條件;
?? 示例:
假設(shè)有以下兩張表:
orders(訂單表)customers(客戶(hù)表)
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- 插入數(shù)據(jù)
INSERT INTO customers VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
INSERT INTO orders VALUES (1, 1, 100.50), (2, 2, 200.75), (3, 3, 300.25);刪除與Bob相關(guān)的訂單:
DELETE o FROM orders o JOIN customers c ON o.customer_id = c.customer_id WHERE c.name = 'Bob';
? 結(jié)果:
- 刪除
Bob相關(guān)的訂單數(shù)據(jù)。
2. 使用LIMIT限制刪除條數(shù)
在刪除大量數(shù)據(jù)時(shí),可以使用 LIMIT 限制刪除的行數(shù),防止誤操作導(dǎo)致大量數(shù)據(jù)丟失。
? 基本語(yǔ)法:
DELETE FROM 表名 WHERE 條件 LIMIT N;
?? 示例:
刪除 users 表中的前兩條記錄:
DELETE FROM users ORDER BY id ASC LIMIT 2;
? 結(jié)果:
- 僅刪除兩條數(shù)據(jù),防止誤刪大量數(shù)據(jù)。
3. 使用ORDER BY和LIMIT
在刪除數(shù)據(jù)時(shí),可以通過(guò) ORDER BY 和 LIMIT 指定刪除順序和數(shù)量。
?? 示例:
刪除年齡最大的 2 個(gè)用戶(hù):
DELETE FROM users ORDER BY age DESC LIMIT 2;
? 結(jié)果:
- 刪除年齡最大的兩名用戶(hù)。
四、DELETE與TRUNCATE的區(qū)別
| 對(duì)比項(xiàng) | DELETE | TRUNCATE |
|---|---|---|
| 數(shù)據(jù)刪除方式 | 按行刪除 | 整表清空 |
| 是否記錄日志 | 記錄日志 | 不記錄日志 |
| 自增 ID 重置 | 不重置 | 重置為 1 |
| 刪除速度 | 慢,逐行刪除 | 快,清空整表 |
| 是否可回滾 | 可回滾(開(kāi)啟事務(wù)) | 不可回滾 |
| 觸發(fā)器是否執(zhí)行 | 會(huì)觸發(fā) | 不會(huì)觸發(fā) |
| 表空間釋放 | 不釋放 | 釋放表空間 |
五、刪除操作的注意事項(xiàng)
謹(jǐn)慎使用
DELETE和TRUNCATETRUNCATE無(wú)法回滾,清空數(shù)據(jù)前要三思。- 在執(zhí)行刪除前,最好使用
SELECT確認(rèn)數(shù)據(jù)范圍。
使用事務(wù)防止誤操作
- 在執(zhí)行大批量刪除時(shí),使用事務(wù)以便回滾:
START TRANSACTION; DELETE FROM users WHERE age > 30; ROLLBACK; -- 撤銷(xiāo)操作 COMMIT; -- 確認(rèn)操作
備份數(shù)據(jù)
- 刪除操作前,備份重要數(shù)據(jù),以防誤刪。
六、總結(jié)
在 MySQL 中,刪除數(shù)據(jù)主要使用以下三種方式:
- ?
DELETE:按條件刪除數(shù)據(jù),記錄日志,可回滾。 - ?
TRUNCATE:清空表數(shù)據(jù),不記錄日志,不可回滾。 - ?
DROP:刪除表及數(shù)據(jù),無(wú)法恢復(fù)。
高級(jí)用法:
- 使用
LIMIT限制刪除條數(shù),防止誤刪大量數(shù)據(jù)。 - 多表關(guān)聯(lián)刪除,提高操作靈活性。
- 使用事務(wù)保護(hù)數(shù)據(jù),防止誤刪不可恢復(fù)。
到此這篇關(guān)于MySQL 刪除數(shù)據(jù)詳解的文章就介紹到這了,更多相關(guān)mysql 刪除數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL——修改root密碼的4種方法(以windows為例)
本文以windows為例為大家詳細(xì)介紹下MySQL修改root密碼的4種方法,大家可以可以根據(jù)的自己的情況自由選擇,希望對(duì)大家有所幫助2013-07-07
MySql數(shù)據(jù)庫(kù)分布式存儲(chǔ)配置實(shí)操步驟
這篇文章主要為大家介紹了MySql數(shù)據(jù)庫(kù)分布式存儲(chǔ)配置實(shí)操步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
一文詳解MySQL在Docker中的部署與數(shù)據(jù)持久化指南
這篇文章主要為大家詳細(xì)介紹了在Docker中運(yùn)行MySQL時(shí)確保數(shù)據(jù)持久化的關(guān)鍵方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-02-02
關(guān)于MySQL的存儲(chǔ)函數(shù)(自定義函數(shù))的定義和使用方法詳解
本文主要講解了關(guān)于MySQL的存儲(chǔ)函數(shù)(自定義函數(shù))的定義和使用方法詳解與存儲(chǔ)函數(shù)與存儲(chǔ)過(guò)程的區(qū)別2018-03-03
MySql基礎(chǔ)知識(shí)總結(jié)SQL優(yōu)化技巧
本文深入探討了MySQL的SQL優(yōu)化,包括explain分析、索引使用技巧、單表與雙表SQL優(yōu)化、避免索引失效原則、其他優(yōu)化方法及鎖機(jī)制,通過(guò)實(shí)例解析,展示了如何通過(guò)修改SQL和創(chuàng)建索引來(lái)提升查詢(xún)性能,感興趣的朋友跟隨小編一起看看吧2025-12-12
linux mysql 數(shù)據(jù)庫(kù)開(kāi)啟外部訪問(wèn)設(shè)置指南
Linux下設(shè)置MySQL和允許外部機(jī)器訪問(wèn),具體目錄是具體情況而定,有的人是安裝了在個(gè)人目錄下,則找到對(duì)應(yīng)的目錄則可以2012-11-11
關(guān)于MYSQL 遠(yuǎn)程登錄的授權(quán)方法 命令
默認(rèn)是不允許遠(yuǎn)程連接的,因?yàn)橛泻艽蟮陌踩[患。需要手動(dòng)增加可以遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)的用戶(hù)2011-11-11

