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

2025-07-02 17:50

本文主要是介绍MySQL 删除数据详解(最新整理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...

一、前言

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

本文将介绍:

  • DELETETRUNCATEDROP 的用法和区别
  • DELETE 语句的高级用法
  • 删除操作的注意事项和最佳实践

二、MySQL 中的三种删除方式

1.DELETE语句

DELETE 语句用于删除表中符合条件的数据行,不删除表本身。

✅ 基本语法:

DELETE FROM 表名 WHERE 条件;
  • 表名:要操作的表名称。
  • WHERE 条件:指定要删除的记录,省略则删除所有记录。
  • 不加 WHERE 会删除表中所有数据,但表结构仍然保留。

示例:

假设有以下表 users

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');
删除指定行:
DELETE FROM usChina编程ers WHERE name = 'Bob';

✅ 结果:删除 name='Bob' 的记录。

删除所有数据:
DELETE FROM users;

✅ 结果:清空表中数据,但表结构还在。

删除多行www.chinasem.cn
DELETE FROM users WHERE age > 25;

✅ 结果:删除所有年龄大于 25 岁的用户。

2.TRUNCATE语句

TRUNCATE 语句用于清空表中的所有数据,但不会记录删除操作,效率比 DELETE 更高。

✅ 基本语法:

TRUNCATE TABLE 表名;
  • 作用:清空表中的数据,但保留表结构。
  • 效率:比 DELETE 快,且释放表空间。
  • 自增 ID 重置TRUNCATE 会将 AUTO_INCREMENT 重置为 1。

示例:

TRUNCATE TABLE users;

✅ 结果:

  • 清空表数据。
  • id 自动增长重置为 1。

3.DROP语句

DROP 语句用于删除表本身,不仅数据被删除,表结构也会消失。

✅ 基本语法:

DROP TABLE 表名;
  • 作用:删除表及其数据,无法恢复。
  • 效率:速度快,但不可恢复。

示例:

DROP TABLE users;

✅ 结果:

  • users 被删除,数据和表结构都不存在。

三、DELETE高级用法

1. 使用DELETE删除多表数据(多表关联删除)

在多表关联查询时,可以使用 JOIN 删除多个表中的数据。

✅ 基本语法:

DELETE 表别名 FROM 表1 AS 别名1
JOIN 表2 AS 别名2 ON 关联条件
WHERE 条件;

示例:

假设有以下两张表:

  • orders(订单表)
  • customers客户表)
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相关的订单:
DELETE o FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE c.name = 'Bob';

✅ 结果:

  • 删除 Bob 相关的订单数据。

2. 使用LIMIT限制删除条数

在删除大量数据时,可以使用 LIMIT 限制删除的行数,防止误操作导致大量数据丢失。

✅ 基本语法:

DELETE FROM php表名 WHERE 条件 LIMIT N;

示例:

删除 users 表中的前两条记录:

DELETE FROM users ORDER BY id ASC LIMIT 2;

✅ 结果:

  • 仅删除两条数据,防止误删大量数据。

3. 使用ORDER BY和LIMIT

在删除数据时,可以通过 ORDER BYLIMIT 指定删除编程顺序和数量。

示例:

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

DELETE FROM users
ORDER BY age DESC
LIMIT 2;

✅ 结果:

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

四、DELETE与TRUNCATE的区别

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

五、删除操作的注意事项

  1. 谨慎使用 DELETETRUNCATE

    • TRUNCATE 无法回滚,清空数据前要三思。
    • 在执行删除前,最好使用 SELECT 确认数据范围。
  2. 使用事务防止误操作

    • 在执行大批量删除时,使用事务以便回滚:
    START TRANSACTION;
    DELETE FROM users WHERE age > 30;
    ROLLBACK; -- China编程撤销操作
    COMMIT;   -- 确认操作
  3. 备份数据

    • 删除操作前,备份重要数据,以防误删。

六、总结

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

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

高级用法:

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

到此这篇关于MySQL 删除数据详解的文章就介绍到这了,更多相关mysql 删除数据内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于MySQL 删除数据详解(最新整理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155281

相关文章

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho