MySQL 删除数据详解(最新整理)!
MySQL 删除数据详解(最新整理)!
一、前言
在 MySQL 中,可以使用DELETE、TRUNCATE和DROP语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。
本文将介绍:
DELETE、TRUNCATE和DROP的用法和区别DELETE语句的高级用法- 删除操作的注意事项和最佳实践
二、MySQL 中的三种删除方式
1.DELETE语句
DELETE语句用于删除表中符合条件的数据行,不删除表本身。
✅ 基本语法:
|
1
|
DELETE FROM 表名 WHERE 条件; |
表名:要操作的表名称。WHERE 条件:指定要删除的记录,省略则删除所有记录。- 不加
WHERE会删除表中所有数据,但表结构仍然保留。
🔥 示例:
假设有以下表users:
|
1
2
3
4
5
6
7
8
9
10
11
|
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,city VARCHAR(50));-- 插入测试数据INSERT INTO users (name, age, city) VALUES('Alice', 25, 'Beijing'),('Bob', 30, 'Shanghai'),('Charlie', 35, 'Guangzhou'); |
删除指定行:
|
1
|
DELETE FROM users WHERE name = 'Bob'; |
✅ 结果:删除name='Bob'的记录。
删除所有数据:
|
1
|
DELETE FROM users; |
✅ 结果:清空表中数据,但表结构还在。
删除多行:
|
1
|
DELETE FROM users WHERE age > 25; |
✅ 结果:删除所有年龄大于 25 岁的用户。
2.TRUNCATE语句
TRUNCATE语句用于清空表中的所有数据,但不会记录删除操作,效率比DELETE更高。
✅ 基本语法:
|
1
|
TRUNCATE TABLE 表名; |
- 作用:清空表中的数据,但保留表结构。
- 效率:比
DELETE快,且释放表空间。 - 自增 ID 重置:
TRUNCATE会将AUTO_INCREMENT重置为 1。
🔥 示例:
|
1
|
TRUNCATE TABLE users; |
✅ 结果:
- 清空表数据。
id自动增长重置为 1。
3.DROP语句
DROP语句用于删除表本身,不仅数据被删除,表结构也会消失。
✅ 基本语法:
|
1
|
DROP TABLE 表名; |
- 作用:删除表及其数据,无法恢复。
- 效率:速度快,但不可恢复。
🔥 示例:
|
1
|
DROP TABLE users; |
✅ 结果:
- 表
users被删除,数据和表结构都不存在。
三、DELETE高级用法
1. 使用DELETE删除多表数据(多表关联删除)
在多表关联查询时,可以使用JOIN删除多个表中的数据。
✅ 基本语法:
|
1
2
3
|
DELETE 表别名 FROM 表1 AS 别名1JOIN 表2 AS 别名2 ON 关联条件WHERE 条件; |
🔥 示例:
假设有以下两张表:
orders(订单表)customers(客户表)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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));-- 插入数据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相关的订单:
|
1
2
3
|
DELETE o FROM orders oJOIN customers c ON o.customer_id = c.customer_idWHERE c.name = 'Bob'; |
✅ 结果:
- 删除
Bob相关的订单数据。
2. 使用LIMIT限制删除条数
在删除大量数据时,可以使用LIMIT限制删除的行数,防止误操作导致大量数据丢失。
✅ 基本语法:
|
1
|
DELETE FROM 表名 WHERE 条件 LIMIT N; |
🔥 示例:
删除users表中的前两条记录:
|
1
|
DELETE FROM users ORDER BY id ASC LIMIT 2; |
✅ 结果:
- 仅删除两条数据,防止误删大量数据。
3. 使用ORDER BY和LIMIT
在删除数据时,可以通过ORDER BY和LIMIT指定删除顺序和数量。
🔥 示例:
删除年龄最大的 2 个用户:
|
1
2
3
|
DELETE FROM usersORDER BY age DESCLIMIT 2; |
✅ 结果:
- 删除年龄最大的两名用户。
四、DELETE与TRUNCATE的区别
| 对比项 | DELETE |
TRUNCATE |
|---|---|---|
| 数据删除方式 | 按行删除 | 整表清空 |
| 是否记录日志 | 记录日志 | 不记录日志 |
| 自增 ID 重置 | 不重置 | 重置为 1 |
| 删除速度 | 慢,逐行删除 | 快,清空整表 |
| 是否可回滚 | 可回滚(开启事务) | 不可回滚 |
| 触发器是否执行 | 会触发 | 不会触发 |
| 表空间释放 | 不释放 | 释放表空间 |
五、删除操作的注意事项
- 谨慎使用
DELETE和TRUNCATETRUNCATE无法回滚,清空数据前要三思。- 在执行删除前,最好使用
SELECT确认数据范围。
- 使用事务防止误操作
- 在执行大批量删除时,使用事务以便回滚:
1234STARTTRANSACTION;DELETEFROMusersWHEREage > 30;ROLLBACK;-- 撤销操作COMMIT;-- 确认操作 - 备份数据
- 删除操作前,备份重要数据,以防误删。
六、总结
在 MySQL 中,删除数据主要使用以下三种方式:
- ✅
DELETE:按条件删除数据,记录日志,可回滚。 - ✅
TRUNCATE:清空表数据,不记录日志,不可回滚。 - ✅
DROP:删除表及数据,无法恢复。
高级用法:
- 使用
LIMIT限制删除条数,防止误删大量数据。 - 多表关联删除,提高操作灵活性。
- 使用事务保护数据,防止误删不可恢复。
到此这篇关于MySQL 删除数据详解的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

