MySQL 删除数据详解(最新整理)!

MySQL 删除数据详解(最新整理)!

作者:wdwc2
这篇文章主要介绍了MySQL 删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧。

一、前言

在 MySQL 中,可以使用DELETETRUNCATEDROP语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。

本文将介绍:

  • DELETETRUNCATEDROP的用法和区别
  • 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 别名1
JOIN 表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 o
JOIN customers c ON o.customer_id = c.customer_id
WHERE 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 BYLIMIT指定删除顺序和数量。

🔥 示例:

删除年龄最大的 2 个用户:

1
2
3
DELETE FROM users
ORDER BY age DESC
LIMIT 2;

✅ 结果:

  • 删除年龄最大的两名用户。

四、DELETE与TRUNCATE的区别

对比项 DELETE TRUNCATE
数据删除方式 按行删除 整表清空
是否记录日志 记录日志 不记录日志
自增 ID 重置 不重置 重置为 1
删除速度 慢,逐行删除 快,清空整表
是否可回滚 可回滚(开启事务) 不可回滚
触发器是否执行 会触发 不会触发
表空间释放 不释放 释放表空间

五、删除操作的注意事项

  1. 谨慎使用DELETETRUNCATE
    • TRUNCATE无法回滚,清空数据前要三思。
    • 在执行删除前,最好使用SELECT确认数据范围。
  2. 使用事务防止误操作
    • 在执行大批量删除时,使用事务以便回滚:
    1
    2
    3
    4
    START TRANSACTION;
    DELETE FROM users WHERE age > 30;
    ROLLBACK; -- 撤销操作
    COMMIT;   -- 确认操作
  3. 备份数据
    • 删除操作前,备份重要数据,以防误删。

六、总结

在 MySQL 中,删除数据主要使用以下三种方式:

  • DELETE:按条件删除数据,记录日志,可回滚。
  • TRUNCATE:清空表数据,不记录日志,不可回滚。
  • DROP:删除表及数据,无法恢复。

高级用法:

  • 使用LIMIT限制删除条数,防止误删大量数据。
  • 多表关联删除,提高操作灵活性。
  • 使用事务保护数据,防止误删不可恢复。

到此这篇关于MySQL 删除数据详解的文章就介绍到这了。

 

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>