【MySQL 删除数据详解】
文章目录
- 一、前言
- 二、MySQL 中的三种删除方式
- 1. `DELETE` 语句
- ✅ 基本语法:
- 🔥 示例:
- 删除指定行:
- 删除所有数据:
- 删除多行:
- 2. `TRUNCATE` 语句
- ✅ 基本语法:
- 🔥 示例:
- 3. `DROP` 语句
- ✅ 基本语法:
- 🔥 示例:
- 三、`DELETE` 高级用法
- 1. 使用 `DELETE` 删除多表数据(多表关联删除)
- ✅ 基本语法:
- 🔥 示例:
- 删除与 `Bob` 相关的订单:
- 2. 使用 `LIMIT` 限制删除条数
- ✅ 基本语法:
- 🔥 示例:
- 3. 使用 `ORDER BY` 和 `LIMIT`
- 🔥 示例:
- 四、`DELETE` 与 `TRUNCATE` 的区别
- 五、删除操作的注意事项
- 六、总结
一、前言
在 MySQL 中,可以使用 DELETE、TRUNCATE 和 DROP 语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。
本文将介绍:
DELETE、TRUNCATE和DROP的用法和区别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 users WHERE name = 'Bob';
✅ 结果:删除 name='Bob' 的记录。
删除所有数据:
DELETE FROM users;
✅ 结果:清空表中数据,但表结构还在。
删除多行:
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 表名 WHERE 条件 LIMIT N;
🔥 示例:
删除 users 表中的前两条记录:
DELETE FROM users ORDER BY id ASC LIMIT 2;
✅ 结果:
- 仅删除两条数据,防止误删大量数据。
3. 使用 ORDER BY 和 LIMIT
在删除数据时,可以通过 ORDER BY 和 LIMIT 指定删除顺序和数量。
🔥 示例:
删除年龄最大的 2 个用户:
DELETE FROM users
ORDER BY age DESC
LIMIT 2;
✅ 结果:
- 删除年龄最大的两名用户。
四、DELETE 与 TRUNCATE 的区别
| 对比项 | DELETE | TRUNCATE |
|---|---|---|
| 数据删除方式 | 按行删除 | 整表清空 |
| 是否记录日志 | 记录日志 | 不记录日志 |
| 自增 ID 重置 | 不重置 | 重置为 1 |
| 删除速度 | 慢,逐行删除 | 快,清空整表 |
| 是否可回滚 | 可回滚(开启事务) | 不可回滚 |
| 触发器是否执行 | 会触发 | 不会触发 |
| 表空间释放 | 不释放 | 释放表空间 |
五、删除操作的注意事项
-
谨慎使用
DELETE和TRUNCATETRUNCATE无法回滚,清空数据前要三思。- 在执行删除前,最好使用
SELECT确认数据范围。
-
使用事务防止误操作
- 在执行大批量删除时,使用事务以便回滚:
START TRANSACTION; DELETE FROM users WHERE age > 30; ROLLBACK; -- 撤销操作 COMMIT; -- 确认操作 -
备份数据
- 删除操作前,备份重要数据,以防误删。
六、总结
在 MySQL 中,删除数据主要使用以下三种方式:
- ✅
DELETE:按条件删除数据,记录日志,可回滚。 - ✅
TRUNCATE:清空表数据,不记录日志,不可回滚。 - ✅
DROP:删除表及数据,无法恢复。
高级用法:
- 使用
LIMIT限制删除条数,防止误删大量数据。 - 多表关联删除,提高操作灵活性。
- 使用事务保护数据,防止误删不可恢复。
相关文章:
【MySQL 删除数据详解】
文章目录 一、前言二、MySQL 中的三种删除方式1. DELETE 语句✅ 基本语法:🔥 示例:删除指定行:删除所有数据:删除多行: 2. TRUNCATE 语句✅ 基本语法:🔥 示例: 3. DROP 语…...
设计模式 Day 6:深入讲透观察者模式(真实场景 + 回调机制 + 高级理解)
观察者模式(Observer Pattern)是一种设计结构中最实用、最常见的行为模式之一。它的魅力不仅在于简洁的“一对多”事件推送能力,更在于它的解耦能力、模块协作设计、实时响应能力。 本篇作为 Day 6,将带你从理论、底层机制到真实…...
C#异步方法返回Task<T>的同步调用
在C#中我们已经非常习惯使用async/await来实现异步调用,但是某些时候并不允许异步调用,比如在一个Dynamics365的插件或操作中 为了确保事务性是不允许异步调用的,这个时候在使用httpclient发起请求时我们就可以使用Task<T>.Result来实现线程阻塞,进行同步方式的调用: va…...
OpenCV 图形API(18)用于执行两个矩阵(或数组)的逐元素减法操作函数sub()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 计算两个矩阵之间的逐元素差值。 sub 函数计算两个矩阵之间的差值,要求这两个矩阵具有相同的尺寸和通道数: dst ( I ) src…...
汽车软件开发常用的需求管理工具汇总
目录 往期推荐 DOORS(IBM ) 行业应用企业: 应用背景: 主要特点: Polarion ALM(Siemens) 行业应用企业: 应用背景: 主要特点: Codebeamer ALM&#x…...
AI 越狱技术剖析:原理、影响与防范
一、AI 越狱技术概述 AI 越狱是指通过特定技术手段,绕过人工智能模型(尤其是大型语言模型)的安全防护机制,使其生成通常被禁止的内容。这种行为类似于传统计算机系统中的“越狱”,旨在突破模型的限制,以实…...
推荐一款Nginx图形化管理工具: NginxWebUI
Nginx Web UI是一款专为Nginx设计的图形化管理工具,旨在简化Nginx的配置与管理过程,提高开发者和系统管理的工作效率。项目地址:https://github.com/cym1102/nginxWebUI 。 一、Nginx WebUI的主要特点 简化配置:通过图形化的界…...
区间 dp 系列 题解
1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具,并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用 W, I, N, G …...
Spring Boot 自动加载流程详解
前言 Spring Boot 是一个基于约定优于配置理念的框架,它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程,并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…...
《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》
在科技飞速发展的当下,我们正见证着计算机技术领域的深刻变革。计算机总线作为信息传输的关键枢纽,其发展历程承载着技术演进的脉络。从传统计算机硬件总线到如今备受瞩目的分布式软总线,每一次的变革都为计算机系统性能与应用拓展带来了质的…...
Fay 数字人部署环境需求
D:\ai\Fay>python main.py pygame 2.6.1 (SDL 2.28.4, Python 3.11.9) Hello from the pygame community. https://www.pygame.org/contribute.html [2025-04-11 00:10:16.7][系统] 注册命令... [2025-04-11 00:10:16.8][系统] restart 重启服务 [2025-04-11 00:10:16.8][…...
python:all列表
1.all列表的说明: 当模块中有__all__变量时,当使用from xxx import *时,只能导入这个列表中的元素。 2.具体的例子: 1.先创建一个模块my_mod,在列表__all__中分别写入第一次只写入test1,第二次写入test1、test2两个…...
基于 SpringBoot 的校园论坛系统
收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...
2025 跨平台技术如何选:KMP 与 Flutter 的核心差异
前言 在移动开发的演进历程中,跨平台技术始终是一个充满争议却无法回避的话题。从早期的 React Native 到如今的 Kotlin Multiplatform(KMP)和 Flutter,开发者们始终在代码复用与原生体验之间寻找平衡。本文我们从技术实现、性能…...
深度学习总结(6)
随机梯度下降 给定一个可微函数,理论上可以用解析法找到它的最小值:函数的最小值就是导数为0的点,因此只需找到所有导数为0的点,然后比较函数在其中哪个点的取值最小。将这一方法应用于神经网络,就是用解析法求出损失…...
SpringBoot实战1
SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent…...
深度学习实战:从零构建图像分类API(Flask/FastAPI版)
引言:AI时代的图像分类需求 在智能时代,图像分类技术已渗透到医疗影像分析、自动驾驶、工业质检等各个领域。作为开发者,掌握如何将深度学习模型封装为API服务,是实现技术落地的关键一步。本文将手把手教你使用Python生态中的Fla…...
【Linux】39.一个基础的HTTP Web服务器
文章目录 1. 实现一个基础的HTTP Web服务器1.1 功能实现:1.2 Log.hpp-日志记录器1.3 HttpServer.hpp-网页服务器1.4 Socket.hpp-网络通信器1.5 HttpServer.cc-服务器启动器 1. 实现一个基础的HTTP Web服务器 1.1 功能实现: 总体功能: 提供We…...
阿里云域名证书自动更新acme.sh
因为阿里云的免费证书只有三个月的有效期,每次更换都比较繁琐,所以找到了 acme.sh,还有一种 certbot 我没有去了解,就直接使用了 acme.sh 来更新证书,acme.sh 的主要特点就是: 支持多种 DNS 服务商自动化续…...
大数据Hadoop(MapReduce)
MapReduce概述 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上…...
图灵逆向——题十七-字体加密
十七题是一个很经典的字体加密案例,很适合新手入门~ 目录列表 过程分析代码实现 过程分析 打开开发者工具直接看请求,发现它请求的没有加密参数,以为万事大吉的你迫不及待的点击了响应,然后就会发现依托。。。 返回的数据中字体…...
(自用)蓝桥杯准备(需要写的基础)
要写的文件 led_app lcd_app key_app adc_app usart_app scheduler LHF_SYS一、外设引脚配置 1. 按键引脚 按键引脚配置如下: B1:PB0B2:PB1B3:PB2B4:PA0 2. LCD引脚 LCD引脚配置如下: GPIO_Pin_9 /* …...
系统与网络安全------网络通信原理(5)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 传输层解析 传输层 传输层的作用 IP层提供点到点的连接传输层提供端到端的连接 端口到端口的连接(不同端口号,代表不同的应用程序) TCP协议概述 TCP(Transm…...
minio提供nfs服务
minio提供nfs服务 挂载minio为本地目录配置开机自动挂载方法1: 使用supervisor实现开机自动挂载方法2: 服务单元实现开机自动挂载minio为本地目录---失败调试 配置NFS服务端 挂载minio为本地目录 使用 Minio 作为后端存储,并通过 NFS 为客户端提供访问,…...
vue2添加背景水印-手动实现(无组件模式)
1. App.vue <template><div id="app" class="app"><router-view></router-view></div> </template><script> export default {mounted() {this.updateWatermark();// 监听路由变化this.$router.afterEach(() =…...
嵌入式---加速度计
一、基本概念与定义 定义 加速度计(Accelerometer)是一种测量物体加速度(线性加速度或振动加速度)的传感器,可检测物体运动状态、振动幅度、倾斜角度等,输出与加速度成比例的电信号(模拟或数字信…...
swagger + Document
swagger 虽然有了api接口,对于复杂接口返回值说明,文档还是不能少。如果是一个人做的还简单一点,现在都搞前后端分离,谁知道你要取那个值呢...
【Git】--- 多人协作实战场景
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Git 前面我们学习了Git的所有本地仓库的相关操作:git基本操作,分支理解,版本回退,冲突解决等等。同时我们还理解了远端仓库在开发的作用以及相关操作push…...
Higress: 阿里巴巴高性能云原生API网关详解
一、Higress概述 Higress是阿里巴巴开源的一款基于云原生技术构建的高性能API网关,专为Kubernetes和微服务架构设计。它集成了Ingress控制器、微服务网关和API网关功能于一体,支持多种协议和丰富的流量管理能力。 发展历程 Higress 从最初社区的 Isti…...
常见的 set 选项与空变量检查
在编写 Bash 脚本时,使用 set 命令中的一些选项可以帮助我们在脚本执行过程中及时捕获错误和潜在问题,避免脚本在出错时继续执行,提高脚本的可靠性和健壮性。 set -e:遇到错误就停 set -e 的作用是:一旦脚本中的某个…...
