MySQL 删除数据语句(图文教程)

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/

截止目前, 星球 内专栏累计输出 72w+ 字,讲解图 3103+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2400+ 小伙伴加入学习 ,欢迎点击围观

在 MySQL 中,DELETE 语句用于从表中删除已存在的记录。通过 DELETE,我们可以有选择性地删除满足特定条件的数据,或者清空表中的所有记录。删除数据是数据库管理中的常见操作,但应谨慎使用,以避免误删除或数据丢失。

1. 基本语法

DELETE 语句的基本语法如下:

DELETE FROM 表名 
[WHERE 条件];
  • 表名:指定要删除数据的表。
  • WHERE:可选项,用于指定删除条件。若省略 WHERE 条件,将删除表中的所有记录

2. 示例:删除特定行数据

假设有一个员工表 t_employee,我们希望删除员工 ID 为 8 的记录:

DELETE FROM t_employee
WHERE employee_id = 8;

此语句会删除 employee_id8 的员工记录。使用 WHERE 条件可以确保只删除特定的行,避免误删整个表的数据。

删除特定行数据删除特定行数据

3. 删除多行数据

DELETE 语句支持使用条件删除多行记录。假设我们要删除所有职位为 "Java工程师" 的员工记录:

DELETE FROM t_employee
WHERE position = 'Java工程师';

此语句会删除 positionJava工程师 的所有员工记录。

4. 删除所有数据:清空表

使用 DELETE 语句删除所有数据时,可以省略 WHERE 条件,但这种方式会记录删除操作的日志。示例:

DELETE FROM t_employee;

使用 TRUNCATE 清空表

除了 DELETE,也可以使用 TRUNCATE 语句来清空表,它通常比 DELETE 更快,尤其是大表时,但会重置表的自增 ID

TRUNCATE TABLE t_employee;

注意TRUNCATE 是一个 DDL 操作,无法使用 WHERE 限制条件删除部分数据,因此适合清空整个表的场景。

DDL 与 DML 是什么?

DDL 介绍

DDL(Data Definition Language) 是数据定义语言,主要用于定义和管理数据库结构(如 、视图、索引 等)。它包含的操作会直接影响数据库的结构。

常用命令

命令功能描述
CREATE创建数据库对象(如数据库、表、索引等)。
ALTER修改已有的数据库对象(如添加字段、修改字段类型等)。
DROP删除数据库对象(如删除表、数据库等)。
TRUNCATE快速清空表中的所有数据(不记录日志)。

特点

  1. DDL 操作通常会立即生效,不需要显式提交(COMMIT)。
  2. 操作通常是不可逆的,例如 DROP 删除表后无法恢复。

DML 介绍

DML(Data Manipulation Language) 是数据操作语言,主要用于操作数据库表中的数据。它不会改变数据库的结构,而是操作数据的内容。

常用命令

命令功能描述
SELECT查询数据
INSERT插入新数据
UPDATE更新已有数据
DELETE删除数据

特点

  1. DML 操作需要显式提交(COMMIT)或回滚(ROLLBACK),以确保事务 的完整性。
  2. 仅影响表中的数据,不改变表结构。

DDL vs DML 对比

特性DDLDML
全称Data Definition LanguageData Manipulation Language
功能定义和管理数据库结构操作表中的数据
常用命令CREATEALTERDROPTRUNCATESELECTINSERTUPDATEDELETE
是否影响结构
事务支持不支持支持

5. 使用 ORDER BYLIMIT 限制删除行数

在某些情况下,我们只想删除满足条件的部分数据,可以结合 ORDER BYLIMIT 使用。例如,删除薪资最低的 5 位员工:

DELETE FROM t_employee
ORDER BY salary ASC
LIMIT 5;

此语句会删除薪资最低的前 5 名员工记录。

6. 使用 JOIN 删除关联数据

在实际应用中,有时需要删除关联表中的数据。通过 DELETEJOIN 的结合,可以实现多表删除。例如,有两张表 t_employeet_department,我们希望删除 t_department 中部门 ID 为 3 的所有员工:

DELETE e
FROM t_employee AS e
JOIN t_department AS d ON e.department_id = d.department_id
WHERE d.department_id = 3;

此语句会删除 department_id3 的所有员工。

7. DELETETRUNCATE 的区别

特性DELETETRUNCATE
语句类型DMLDDL
删除范围可以有条件地删除部分数据只能清空整个表
日志记录逐行记录不记录逐行日志
自增列重置不会重置自增 ID会重置自增 ID
是否可回滚支持事务回滚不支持事务回滚
触发器执行时触发触发器不触发任何触发器

8. 小结

在 MySQL 中,删除数据主要使用 DELETETRUNCATE 语句。DELETE 适合条件删除,可以选择性地删除数据,并支持事务操作;TRUNCATE 适合清空整个表,速度更快,但不支持条件删除。通过合理选择删除方式并使用事务保护数据安全,我们可以更高效、可靠地管理数据。