MySQL 的 ​​DELETE​​ 语句用于从数据库表中删除记录。这是一项非常强大且危险的操作,因为一旦执行,数据通常无法恢复。理解其语法和安全实践至关重要。

以下是 MySQL 删除语句的详细指南。

一、 核心语法:DELETE

​DELETE​​ 语句用于删除表中的一行或多行记录。

基本语法

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name
[WHERE condition]
[ORDER BY ...]
[LIMIT row_count];
  • DELETE FROM table_name​: 指定要从哪个表删除数据。
  • WHERE​: 极其重要! 指定哪些记录需要被删除。如果省略 WHERE​ 子句,将删除表中的所有记录!
  • ORDER BY​​: 与 ​​LIMIT​​ 配合使用,指定先按什么顺序排序,再删除。
  • LIMIT​: 限制要删除的记录数量。

二、 删除操作示例

假设我们有一个 ​​users​​ 表,结构如下:

id

username

email

status

1

alice

​​alice@example.com​

inactive

2

bob

​​bob@example.com​

active

3

charlie

​​charlie@example.com​

inactive

4

david

​​david@example.com​

active

  1. 删除特定的记录(带 WHERE 条件)

删除用户名为 'charlie' 的记录。

DELETE FROM users
WHERE username = 'charlie';

最佳实践:尽量使用唯一性强的条件(如主键 ​​id​​)来精准定位要删除的行,避免误删。

DELETE FROM users
WHERE id = 3;
  1. 删除所有记录(清空表)

删除 ​​users​​ 表中的所有数据。

DELETE FROM users;

警告:这条语句会清空整个表,但表结构(列、索引等)依然存在。执行前必须万分谨慎

  1. 使用 LIMIT 限制删除数量

删除最早注册的 1 个状态为 ​​inactive​​ 的用户。

DELETE FROM users
WHERE status = 'inactive'
ORDER BY id ASC -- 按ID升序(假设ID越小注册越早)
LIMIT 1;

三、 清空表:DELETE vs TRUNCATE

除了 ​​DELETE​​,MySQL 还提供了 ​​TRUNCATE TABLE​​ 语句来清空整个表。两者有重要区别:

特性

​DELETE​

​TRUNCATE TABLE​

本质

DML操作(数据操作语言)

DDL操作(数据定义语言)

速度

较慢。逐行删除,并在事务日志中记录每一行。

极快。直接释放存储表数据的数据页。

事务

支持。删除操作可以被 ​ROLLBACK

在大多数情况下(取决于存储引擎),无法回滚

自增列

不会重置自增计数器(AUTO_INCREMENT)。下次插入的ID会继续增长。

会重置自增计数器为初始值。下次插入的ID从 1 开始。

WHERE 条件

支持使用 ​​WHERE​​ 条件删除部分数据。

不支持任何条件,只能清空整个表。

如何选择?

  • 需要删除特定记录时,必须使用 ​​DELETE ... WHERE ...​​。
  • 需要快速清空整个表且不需要回滚时,使用 ​​TRUNCATE TABLE​​。
  • 需要清空整个表但可能需要回滚时,使用 ​​DELETE FROM table_name​​。

TRUNCATE 语法:

TRUNCATE [TABLE] table_name;
-- 示例
TRUNCATE TABLE users;

四、 多表删除 (DELETE with JOIN)

你可以使用 ​​JOIN​​ 语法基于另一个表的条件来删除本表的数据。这在处理有关联的表时非常有用。

语法 1 (使用 DELETE ... JOIN):

DELETE t1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.foreign_key_id
WHERE t2.some_condition;

语法 2 (使用子查询):

DELETE FROM table1
WHERE id IN (SELECT foreign_key_id FROM table2 WHERE some_condition);

示例: 假设还有一个 ​​orders​​ 表,存储用户的订单。现在要删除所有从未下过订单的用户。

-- 方法 1: 使用 LEFT JOIN 找到不存在的关联
DELETE u
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.user_id IS NULL;-- 方法 2: 使用子查询
DELETE FROM users
WHERE id NOT IN (SELECT DISTINCT user_id FROM orders);

五、 安全注意事项与最佳实践

1.备份先行 (Backup First) 在执行任何删除操作,尤其是会影响大量数据的操作之前,务必进行数据备份。

使用 mysqldump 备份单表
mysqldump -u username -p database_name table_name > backup.sql

2.先 SELECT,后 DELETE 这是一个黄金法则。先用 SELECT 语句验证 WHERE 条件是否正确匹配到了你想要删除的数据。

-- 1. 先查询,确认要删除哪些数据
SELECT * FROM users WHERE status = 'inactive';-- 2. 确认结果无误后,将 SELECT * 替换为 DELETE
DELETE FROM users WHERE status = 'inactive';

3.使用事务 (Transaction) 对于重要的删除操作,最好在事务中执行。这样如果发生错误,你可以回滚整个操作。

START TRANSACTION; -- 开始事务DELETE FROM orders WHERE date < '2020-01-01';
DELETE FROM users WHERE status = 'expired';
-- 此时可以检查一下是否删对了
SELECT * FROM users WHERE ...;ROLLBACK; -- 如果发现删错了,回滚,所有删除操作取消
-- COMMIT; -- 如果确认无误,提交事务,使删除生效

4.权限控制 在生产数据库中,严格限制拥有 DELETE 权限的用户数量。永远不要给应用程序账户过高的权限。

另外搭配便捷的MYSQL备份工具,可定时备份、异地备份,MYSQL导出导入。可本地连接LINUX里的MYSQL,简单便捷。可以大大地提高工作效率喔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98585.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98585.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98585.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 系統使用過程中黑屏問題分析

背景&#xff1a; 工欲善其事&#xff0c;必先利其器。作为程序员&#xff0c;想要得到更好的发展&#xff0c;遇到问题直接baidu, google 虽然可以得到一些参考或者答案&#xff0c;但是也会降低自己的思考能力&#xff0c;本文以ubuntu 使用过程中黑屏这一问题为背景&#x…

Redis(45)哨兵模式与集群模式有何区别?

Redis 提供了两种高可用性解决方案&#xff1a;哨兵模式和集群模式。它们各自有不同的特点和适用场景。以下是详细的对比和结合代码的示例&#xff1a; 哨兵模式&#xff08;Sentinel&#xff09; 特点高可用性&#xff1a; Sentinel 通过监控、通知、故障转移等功能&#xff0…

微信小程序如何进行分包处理?

目录 分包是什么&#xff1f; 为什么要分包&#xff1f; 分包前后结构对比 具体操作步骤 第 1 步&#xff1a;规划分包结构 第 2 步&#xff1a;修改 app.json 进行配置 第 3 步&#xff1a;创建分包目录并移动文件 第 4 步&#xff1a;处理组件和工具函数的引用 第 5…

Go语言极速入门与精要指南从零到精通的系统化学习路径

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

git 切换仓库后清理分支缓存

我明白了&#xff0c;从您的截图可以看到远程仓库中有 feature/v1.4_20250903 分支&#xff0c;但本地 git branch -r 看不到&#xff0c;这是因为之前更换过仓库地址后需要重新获取远程仓库的所有信息。让我们执行以下步骤来解决这个问题&#xff1a; 首先执行 git fetch --al…

考研倒计时101天---路由选择协议

路由选择协议&#xff1a;RIP 与 OSPFRIP 协议&#xff08;基于距离向量算法&#xff09;RIP&#xff08;Routing Information Protocol&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;采用距离向量算法进行路由选择。其主要特点如下&#xff1a;工作机…

「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系

坚持的本身就是意义 目录直观类比类 (Class) vs 实例 (Instance)对比表示例代码类 - 原型 - 实例关系图解释&#xff1a;类 (class Person)原型 (Person.prototype)实例 (new Person(...))总结&#xff1a;直观类比 类&#xff08;Class&#xff09; 图纸 / 模板实例&#xf…

第一课、Cocos Creator 3.8 安装与配置

介绍说明 本文主要介绍在windows系统中&#xff0c;安装开发Cocos使用的软件工具&#xff0c;主要包含&#xff1a;安装CocosDashboard控制面板、CocosCreator3.8编辑器和脚本编辑器 VS Code 。 一、Cocos Dashboard 的安装 说明&#xff1a;Cocos Dashboard 主要作用是能够同…

从航空FACE的一个落地方案漫谈汽车HPC软件架构的思维转变(2/3)FACE的“段”同Autosar的“层”概念区别探索

文章目录PART THREE&#xff1a;段和层的概念比较一、“段”更强调“功能闭环责任归属”&#xff0c;而非“单纯的层级堆叠”二、“段”规避“层”的“刚性依赖陷阱”&#xff0c;适配航空系统的“灵活组合需求”三、“段”贴合航空工业的“工程化语言习惯”&#xff0c;降低跨…

金融量化指标--6InformationRatio信息比率

InformationRatio信息比率计算公式添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;一、信息比率&#xff08;IR&#xff09;是什么&#xff1f;核心概念&#xff1a;信息比率衡量的是投资组合经理相对于某个基准指数&#xff08;Benchmark&#xff09;&…

Java全栈开发面试实录:从基础到微服务的实战经验分享

Java全栈开发面试实录&#xff1a;从基础到微服务的实战经验分享 一、初识面试场景 我叫李明&#xff0c;28岁&#xff0c;毕业于复旦大学计算机科学与技术专业&#xff0c;硕士学历。在互联网行业已经有5年的工作经验&#xff0c;先后在两家中型互联网公司担任Java全栈开发工程…

【51单片机】【protues仿真】基于51单片机公交报站系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 主要功能如下&#xff1a; 1、LCD12864显示时间、日期、公交车车站、温度等 2、按键设置时间&#xff0c;显示公交车信息 3、串口播报相应站点信息 4、按键控制上行、下行、手动播…

第1节-PostgreSQL入门-从表中查询数据

摘要&#xff1a;在本教程中,你将学习如何使用 PostgreSQL 的 SELECT 语句从表中检索数据。 SELECT 语句 要从表中查询数据,需使用 PostgreSQL 的 SELECT 语句。 以下是 SELECT 语句的基本语法: SELECT column1, column2, ... FROM table_name;在这种语法中: 首先,在 SELECT 关…

【C++进阶】---- map和set的使用

1.序列式容器和关联式容器 前⾯我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧密的关联关系…

430章:Python Web爬虫入门:使用Requests和BeautifulSoup

在软件交付日益高频、用户需求快速迭代的今天&#xff0c;版本发布流程的规范性直接决定了团队的交付效率、产品质量和用户满意度。然而&#xff0c;许多团队仍面临以下痛点&#xff1a;发布混乱&#xff1a;分支管理随意&#xff0c;代码冲突频发&#xff1b;质量失控&#xf…

代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和

本文所有题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 454.四数相加II 有四个数组&#xff0c;如果要遍历则时间复杂度太大 可以选择分组&#xff0c;a和b一组&#xff0c;c和d一组 这样就可以等同于…

Vue3源码reactivity响应式篇之computed计算属性

概述 vue3中&#xff0c;computed函数用于表示计算属性&#xff0c;有惰性求值、响应式追踪依赖的特点。本文将介绍computed的实现原理以及其机制细节。 源码解析 computed计算属性和computed方法、ComputedRefImpl类以及refreshComputed方法有关。 computed方法 computed暴露给…

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行Keil5-验证“Reset and Run”功能是否生效参考文章Keil5-验证“Reset and Run”功能是否生效 参考文章 Keil5烧录后STM32不自动运行&#xff1f;必须复位才能启动的终极解决方案

阿里云Qwen3系列模型部署微调评测

与阿里云一起轻松实现数智化让算力成为公共服务&#xff1a;用大规模的通用计算&#xff0c;帮助客户做从前不能做的事情&#xff0c;做从前做不到的规模。让数据成为生产资料&#xff1a;用数据的实时在线&#xff0c;帮助客户以数据为中心改变生产生活方式创造新的价值。模型…

北京鲁成伟业 | 三屏加固笔记本电脑C156F3

在工业控制、应急指挥、测控及无人机作业等对设备稳定性与环境适应性要求较高的领域&#xff0c;一款性能均衡且坚固耐用的计算机往往能为工作效率提供有力支撑。三屏加固笔记本电脑C156F3便是针对这类需求设计的设备&#xff0c;凭借多方面的特性&#xff0c;可满足不同场景下…