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_id
为 8
的员工记录。使用 WHERE
条件可以确保只删除特定的行,避免误删整个表的数据。
3. 删除多行数据
DELETE
语句支持使用条件删除多行记录。假设我们要删除所有职位为 "Java工程师" 的员工记录:
DELETE FROM t_employee
WHERE position = 'Java工程师';
此语句会删除 position
为 Java工程师
的所有员工记录。
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 | 快速清空表中的所有数据(不记录日志)。 |
特点
- DDL 操作通常会立即生效,不需要显式提交(
COMMIT
)。 - 操作通常是不可逆的,例如
DROP
删除表后无法恢复。
DML 介绍
DML(Data Manipulation Language) 是数据操作语言,主要用于操作数据库表中的数据。它不会改变数据库的结构,而是操作数据的内容。
常用命令
命令 | 功能描述 |
---|---|
SELECT | 查询数据 |
INSERT | 插入新数据 |
UPDATE | 更新已有数据 |
DELETE | 删除数据 |
特点
- DML 操作需要显式提交(
COMMIT
)或回滚(ROLLBACK
),以确保事务 的完整性。 - 仅影响表中的数据,不改变表结构。
DDL vs DML 对比
特性 | DDL | DML |
---|---|---|
全称 | Data Definition Language | Data Manipulation Language |
功能 | 定义和管理数据库结构 | 操作表中的数据 |
常用命令 | CREATE 、ALTER 、DROP 、TRUNCATE | SELECT 、INSERT 、UPDATE 、DELETE |
是否影响结构 | 是 | 否 |
事务支持 | 不支持 | 支持 |
5. 使用 ORDER BY
和 LIMIT
限制删除行数
在某些情况下,我们只想删除满足条件的部分数据,可以结合 ORDER BY
和 LIMIT
使用。例如,删除薪资最低的 5 位员工:
DELETE FROM t_employee
ORDER BY salary ASC
LIMIT 5;
此语句会删除薪资最低的前 5 名员工记录。
6. 使用 JOIN 删除关联数据
在实际应用中,有时需要删除关联表中的数据。通过 DELETE
和 JOIN
的结合,可以实现多表删除。例如,有两张表 t_employee
和 t_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_id
为 3
的所有员工。
7. DELETE
与 TRUNCATE
的区别
特性 | DELETE | TRUNCATE |
---|---|---|
语句类型 | DML | DDL |
删除范围 | 可以有条件地删除部分数据 | 只能清空整个表 |
日志记录 | 逐行记录 | 不记录逐行日志 |
自增列重置 | 不会重置自增 ID | 会重置自增 ID |
是否可回滚 | 支持事务回滚 | 不支持事务回滚 |
触发器 | 执行时触发触发器 | 不触发任何触发器 |
8. 小结
在 MySQL 中,删除数据主要使用 DELETE
和 TRUNCATE
语句。DELETE
适合条件删除,可以选择性地删除数据,并支持事务操作;TRUNCATE
适合清空整个表,速度更快,但不支持条件删除。通过合理选择删除方式并使用事务保护数据安全,我们可以更高效、可靠地管理数据。