MySQL 删除数据语句
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观
在 MySQL 中,DELETE
语句用于从表中删除已存在的记录。通过 DELETE
,我们可以有选择性地删除满足特定条件的数据,或者清空表中的所有记录。删除数据是数据库管理中的常见操作,但应谨慎使用,以避免误删除或数据丢失。
1. 基本语法
DELETE
语句的基本语法如下:
DELETE FROM 表名
[WHERE 条件];
- 表名:指定要删除数据的表。
- WHERE:可选项,用于指定删除条件。若省略
WHERE
条件,将删除表中的所有记录。
2. 示例:删除特定行数据
假设有一个员工表 t_employee
,我们希望删除员工 ID 为 101 的记录:
DELETE FROM t_employee
WHERE employee_id = 101;
此语句会删除 employee_id
为 101
的员工记录。使用 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
限制条件删除部分数据,因此适合清空整个表的场景。
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
和 departments
,我们希望删除 departments
中部门 ID 为 3 的所有员工:
DELETE e
FROM t_employee AS e
JOIN departments AS d ON e.department_id = d.department_id
WHERE d.department_id = 3;
此语句会删除 department_id
为 3
的所有员工。
7. 使用事务保护删除操作
删除操作不可逆,为避免误删,可以使用事务保护删除操作。在删除前开启事务,如果删除出错或需要撤销,可以通过回滚恢复数据:
START TRANSACTION;
DELETE FROM t_employee
WHERE position = 'Intern';
ROLLBACK; -- 如果需要撤销删除操作
-- COMMIT; -- 确认无误后提交事务
通过 START TRANSACTION
、ROLLBACK
和 COMMIT
,可以确保删除操作的安全性。
8. DELETE
与 TRUNCATE
的区别
特性 | DELETE | TRUNCATE |
---|---|---|
语句类型 | DML | DDL |
删除范围 | 可以有条件地删除部分数据 | 只能清空整个表 |
日志记录 | 逐行记录 | 不记录逐行日志 |
自增列重置 | 不会重置自增 ID | 会重置自增 ID |
是否可回滚 | 支持事务回滚 | 不支持事务回滚 |
触发器 | 执行时触发触发器 | 不触发任何触发器 |
9. 小结
在 MySQL 中,删除数据主要使用 DELETE
和 TRUNCATE
语句。DELETE
适合条件删除,可以选择性地删除数据,并支持事务操作;TRUNCATE
适合清空整个表,速度更快,但不支持条件删除。通过合理选择删除方式并使用事务保护数据安全,我们可以更高效、可靠地管理数据。