当前位置: 首页 > article >正文

2.14 sql数据删除(DELETE、TRUNCATE)

2.14 数据删除DELETE、TRUNCATE这一章我会带你彻底搞懂SQL中删除数据的两大利器DELETE和TRUNCATE。学完之后你能安全地清理无效订单、测试数据并能区分什么时候用DELETE什么时候用TRUNCATE。学习前准备已完成MySQL安装参考系列前几章已安装DBeaver或Navicat准备一个练习数据库比如delete_demo学习前环境准备步骤1确保MySQL服务已启动。步骤2创建练习数据库和表。CREATEDATABASEdelete_demoCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;USEdelete_demo;-- 订单表CREATETABLEorders(order_idVARCHAR(50)PRIMARYKEY,user_idINTNOTNULL,amountDECIMAL(10,2)NOTNULL,order_statusTINYINTNOTNULLDEFAULT1COMMENT1待支付,2已支付,3已取消,4已完成,create_timeDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP);-- 用户表CREATETABLEusers(user_idINTPRIMARYKEY,user_nameVARCHAR(50));-- 插入测试数据INSERTINTOusers(user_id,user_name)VALUES(1,张三),(2,李四),(3,王五);INSERTINTOorders(order_id,user_id,amount,order_status,create_time)VALUES(ORD001,1,299.00,2,2025-06-01 10:00:00),(ORD002,2,189.00,1,2025-06-01 11:00:00),(ORD003,3,599.00,3,2025-06-02 09:30:00),(ORD004,1,399.00,2,2025-06-03 14:20:00),(ORD005,2,99.00,4,2025-06-04 16:00:00);DELETE与TRUNCATE的基础认知3.1 核心定义DELETE逐行删除数据支持WHERE条件可以回滚在事务中。删除速度慢但更灵活。TRUNCATE清空整张表不支持WHERE条件不能回滚在MySQL中默认自动提交。删除速度快相当于DROP后重建表。3.2 核心区别对比维度DELETETRUNCATE是否支持WHERE✅ 支持❌ 不支持只能全表清空是否可回滚✅ 在事务中可以ROLLBACK❌ 默认自动提交不可回滚执行速度慢逐行操作快重建表自增列计数不重置继续从上次最大值1重置为1触发器触发会触发DELETE触发器不触发触发器锁粒度行级锁表级锁磁盘空间不释放只是标记删除立即释放3.3 电商场景下的适用选择删除特定条件的行如超时未支付订单用DELETE。清空临时表或测试表用TRUNCATE。删除大批量数据且需要释放磁盘空间用TRUNCATE如果全表清空或分批DELETE后OPTIMIZE TABLE。我的踩坑经历有一次我想清空一张临时表用了DELETE FROM temp_table没有加WHERE。虽然删光了数据但表占用的磁盘空间没释放而且自增ID还在增长。后来改用TRUNCATE temp_table空间释放了ID也重置了。清空整张表用TRUNCATE比DELETE更合适。带WHERE条件的精准删除4.1 基础语法DELETEFROM表名WHERE条件;4.2 电商实操案例案例一删除超时未支付的订单电商规则超过30分钟未支付的订单自动取消需要从订单表中删除或标记为取消。这里演示物理删除。-- 删除30分钟前创建的待支付订单DELETEFROMordersWHEREorder_status1ANDcreate_timeNOW()-INTERVAL30MINUTE;案例二删除指定用户的测试订单-- 删除用户ID为999的测试订单DELETEFROMordersWHEREuser_id999;案例三删除特定时间段内的已取消订单-- 删除2024年之前已取消的订单DELETEFROMordersWHEREorder_status3ANDcreate_time2024-01-01;4.3 安全操作黄金法则再次强调执行DELETE前必须先用相同的WHERE条件执行SELECT确认要删除的行数正确。-- 第一步查看要删除的数据SELECT*FROMordersWHEREorder_status3ANDcreate_time2024-01-01;-- 第二步执行删除DELETEFROMordersWHEREorder_status3ANDcreate_time2024-01-01;-- 第三步验证删除结果可选SELECTCOUNT(*)FROMordersWHEREorder_status3ANDcreate_time2024-01-01;-- 应为04.4 限制删除行数LIMITMySQL支持DELETE语句中使用LIMIT限制删除的行数分批删除可避免锁表过久。-- 每次只删除1000条超时订单DELETEFROMordersWHEREorder_status1ANDcreate_timeNOW()-INTERVAL30MINUTELIMIT1000;可以循环执行直到影响行数为0。实操避坑提醒DELETE中如果使用了LIMITORDER BY不是必须的但为了可预测性建议加上ORDER BY。另外LIMIT在删除时可能造成“跳过”数据如果表在并发写入最好配合主键排序。全表数据删除DELETE无WHERE 与 TRUNCATE5.1 DELETE无WHERE全表删除DELETEFROMorders;特点删除所有行但表结构、索引、自增ID起始值保留继续递增。速度慢支持事务回滚。5.2 TRUNCATE清空表TRUNCATETABLEorders;特点快速清空所有行自增ID重置为1释放磁盘空间不支持回滚在MySQL中默认提交。5.3 分步操作对比使用DELETE清空测试表STARTTRANSACTION;DELETEFROMorders_test;-- 检查结果如果正确则COMMIT否则ROLLBACKCOMMIT;使用TRUNCATE清空测试表TRUNCATETABLEorders_test;5.4 电商场景实操清空临时表大促期间每小时会创建临时表orders_hour存储实时数据处理完后需要清空。-- 推荐用TRUNCATETRUNCATETABLEorders_hour;5.5 避坑提醒TRUNCATE不能回滚执行前必须确认是测试环境或已备份。TRUNCATE会重置自增ID如果业务依赖ID连续性慎用。TRUNCATE不会触发DELETE触发器如果表上有外键约束且子表有数据可能无法执行取决于外键设置。我的踩坑经历有一次我准备清空一张生产环境的临时表用了TRUNCATE结果发现这张表有外键被其他表引用执行失败。后来改用DELETE逐行删除才成功。TRUNCATE遇到外键约束时可能失败需要先处理子表数据或临时禁用外键检查。关联表删除6.1 使用子查询删除电商场景删除所有没有关联用户的订单孤儿订单。DELETEFROMordersWHEREuser_idNOTIN(SELECTuser_idFROMusers);注意MySQL中DELETE的子查询不能直接引用被删除的表某些版本会报错可以用多表删除语法绕过。6.2 使用多表JOIN删除推荐语法DELETE别名1,别名2FROM表1别名1JOIN表2别名2ON条件WHERE筛选;电商场景一删除用户及其所有订单级联删除-- 删除用户ID为1的用户及其所有订单DELETEu,oFROMusers uLEFTJOINorders oONu.user_ido.user_idWHEREu.user_id1;电商场景二删除没有订单的用户DELETEuFROMusers uLEFTJOINorders oONu.user_ido.user_idWHEREo.order_idISNULL;电商场景三删除已取消订单中的无效商品明细假设有订单明细表先创建订单明细表示例CREATETABLEorder_items(item_idINTPRIMARYKEYAUTO_INCREMENT,order_idVARCHAR(50),product_nameVARCHAR(100),FOREIGNKEY(order_id)REFERENCESorders(order_id));INSERTINTOorder_items(order_id,product_name)VALUES(ORD003,测试商品),(ORD003,另一个商品);删除已取消订单对应的明细DELETEoiFROMorder_items oiJOINorders oONoi.order_ido.order_idWHEREo.order_status3;6.3 分步操作先用SELECT验证关联结果。将SELECT改为DELETE注意指定要删除的表别名。执行并验证。-- 验证SELECToi.*FROMorder_items oiJOINorders oONoi.order_ido.order_idWHEREo.order_status3;-- 删除DELETEoiFROMorder_items oiJOINorders oONoi.order_ido.order_idWHEREo.order_status3;实操避坑提醒多表删除时DELETE后面跟的是要删除的表的别名不是*。如果要同时删除多表数据用逗号分隔别名如DELETE u, o FROM ...。务必确认哪些表需要删除避免误删。综合实操案例年度历史无效测试数据清理7.1 案例背景某服饰类目电商店铺需要进行数据清理任务包括删除所有2023年之前创建的、状态为“已取消”的订单。删除超过1年未登录的用户假设有last_login_time字段这里简化用user_id不在新订单中出现。清空临时表temp_order_import中的数据使用TRUNCATE。删除没有关联订单的用户孤儿用户。7.2 准备工作添加必要的字段和测试数据。-- 添加last_login_time字段模拟ALTERTABLEusersADDlast_login_timeDATETIMEDEFAULTNOW();UPDATEusersSETlast_login_time2023-01-01WHEREuser_id3;-- 模拟老用户-- 创建临时表CREATETABLEtemp_order_importLIKEorders;INSERTINTOtemp_order_importSELECT*FROMordersWHERE10;-- 空表7.3 分步操作步骤1删除2023年前的已取消订单-- 先查看SELECT*FROMordersWHEREorder_status3ANDcreate_time2023-01-01;-- 删除DELETEFROMordersWHEREorder_status3ANDcreate_time2023-01-01;步骤2删除超过1年未登录的用户假设条件用户没有在最近一年的订单中出现-- 查看孤儿用户SELECTu.*FROMusers uLEFTJOINorders oONu.user_ido.user_idWHEREo.order_idISNULL;-- 删除DELETEuFROMusers uLEFTJOINorders oONu.user_ido.user_idWHEREo.order_idISNULL;步骤3清空临时表TRUNCATETABLEtemp_order_import;步骤4验证清理结果-- 检查订单表行数SELECTCOUNT(*)FROMorders;-- 检查用户表行数SELECTCOUNT(*)FROMusers;7.4 合规提示 电商数据合规红线删除用户数据前必须确认符合数据保留政策。例如用户注销后根据《个人信息保护法》数据保留不应超过必要期限。删除前应确认是否有未结订单或法律义务。禁止物理删除生产核心表数据。推荐采用“软删除”增加is_deleted字段标记便于审计和恢复。删除操作必须记录日志包括操作人、时间、删除条件、影响行数。重要删除需审批。本章踩坑清单与合规总结8.1 新手常见踩坑错误后果正确做法DELETE忘加WHERE全表数据丢失先写WHERE先SELECT验证使用TRUNCATE删除子表有外键依赖报错先删除子表数据或临时禁用外键检查批量删除大表无LIMIT锁表过久影响业务分批删除如每次1000行多表删除时DELETE后写了*语法错误写要删除的表别名删除前不备份误删无法恢复备份CREATE TABLE backup LIKE 原表; INSERT INTO backup SELECT * FROM 原表;8.2 安全删除最佳实践永远先备份CREATE TABLE orders_backup_20250401 AS SELECT * FROM orders WHERE 条件;开启事务START TRANSACTION;→ 执行DELETE→SELECT验证 →COMMIT;或ROLLBACK;限制删除行数大表用LIMIT分批删除避免长事务。检查外键依赖删除父表数据前确认子表已处理或使用ON DELETE CASCADE。生产环境删除必须走审批。8.3 电商数据合规提示软删除优于硬删除在订单表、用户表中增加is_deleted字段默认0。查询时加上WHERE is_deleted 0。这样数据可追溯满足合规审计要求。删除用户数据需满足“最小必要”原则只删除不再需要的字段而不是整条记录。定期归档而非删除历史数据可以移到归档库或冷存储而不是直接物理删除。结语DELETE和TRUNCATE是数据生命周期管理的重要工具。掌握它们你就能安全地清理无效数据、归档历史记录。但永远记住删除操作不可逆谨慎是唯一的安全带。有问题的评论区留言我看到会回复。

相关文章:

2.14 sql数据删除(DELETE、TRUNCATE)

2.14 数据删除(DELETE、TRUNCATE) 这一章我会带你彻底搞懂SQL中删除数据的两大利器:DELETE和TRUNCATE。学完之后,你能安全地清理无效订单、测试数据,并能区分什么时候用DELETE,什么时候用TRUNCATE。 学习前…...

【限时公开】某千亿级AI平台未披露的异常处理协议v3.2:支持跨Agent协作恢复的分布式Saga-LLM混合事务模型

第一章:AIAgent架构中的异常处理机制 2026奇点智能技术大会(https://ml-summit.org) 在AIAgent系统中,异常并非边缘场景,而是核心运行态的固有组成部分。当Agent执行任务链(如“检索→推理→工具调用→响应生成”)时&…...

Android开发实战:用Zxing实现前置摄像头扫码的5个常见坑及解决方案

Android开发实战:Zxing前置摄像头扫码的5个技术深坑与工业级解决方案 在移动支付和身份核验场景中,前置摄像头扫码正成为刚需功能。但当你把Zxing的默认后置摄像头方案切换到前置时,会发现这个看似简单的需求背后藏着诸多"暗礁"。本…...

2.13 sql数据更新(UPDATE)

2.13 数据更新(UPDATE) 在电商数据分析工作中,你会遇到这些必须用UPDATE的场景:批量修正错误数据(如订单状态、商品价格、用户等级)。运营活动结束后统一调整商品库存。根据用户行为数据更新用户标签&#…...

为什么File Browser是自建云端文件管理的最佳选择?3步打造个人文件中心

为什么File Browser是自建云端文件管理的最佳选择?3步打造个人文件中心 【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/gh_mirrors/fi/filebrowser 还在为跨设备访问文件而烦恼吗?是否厌倦了在多个…...

实证论文不再卡壳!虎贲等考 AI 数据分析:零代码做出期刊级结果

在本科、硕士毕业论文与期刊发表中,数据分析往往是最容易卡住、最耗时、最容易出错的环节。不会 Stata、不懂 Python、SPSS 操作复杂、面板数据不会处理、回归结果不会解读…… 这些问题让大量学生与研究者卡在实证阶段,反复返修、延期、被拒稿。 如今&…...

问卷设计还在手动瞎编?对比实测:虎贲等考 AI 一键生成专业问卷,统计分析一步到位

每逢课程论文、毕业论文、调研实践、学术课题,问卷设计与数据分析就成了最磨人的环节。很多同学要么题目不专业、维度不清晰,要么信效度不过关、数据无法分析,熬了几天做出来的问卷,最后根本用不了。 市面上的问卷工具要么只能收…...

告别熬夜绘图!虎贲等考 AI 科研绘图:让期刊级图表一键成型

在论文写作、课题研究与期刊发表中,科研绘图是决定成果呈现质量的关键环节,更是审稿人重点关注的 “门面标准”。一张规范、清晰、数据真实的图表,能显著提升论文说服力;而粗糙、模糊、不合规的插图,往往直接导致返修甚…...

按 Token 计费是个坑?企业级 Agent 的 FinOps 成本控制策略

按 Token 计费是个坑?企业级 Agent 的 FinOps 成本控制策略 关键词 Token 计费 企业级 Agent FinOps 成本控制 大语言模型(LLM) prompt 工程 资源优化 摘要 随着大语言模型(LLM)在企业中的广泛应用,Token计费模式已成为AI应用成本的主要组成部分。本文深入探讨了企业级Agen…...

【联合仿真实战】从零搭建Adams机械臂与Simulink的闭环控制模型

1. 从开环到闭环:为什么需要控制算法? 当你已经完成Adams机械臂与Simulink的基础联合仿真对接,看着机械臂在开环控制下勉强运动时,可能会发现这些问题:末端轨迹像醉汉走路一样飘忽不定,关节角度总是偏离预期…...

fMRI(4-1)统计分析报告生成器说明

fMRI 统计分析报告生成器说明 文件:generate_stats_report.m 版本:v1.0 依赖:run_full_pipeline.m run_post_analysis.m 的完整输出 被试分组 CSV 目录 功能概述依赖环境目录结构要求输入参数输出文件全局配置参数调用方式数据预加载流程报…...

AIAgent架构中的多目标优化难题(工业级Agent系统92%失败源于此)

第一章:AIAgent架构中的多目标优化 2026奇点智能技术大会(https://ml-summit.org) 在现代AI Agent系统中,单一指标优化已无法满足复杂场景需求——响应延迟、推理准确性、资源消耗、用户意图对齐度与长期任务成功率往往相互冲突。多目标优化&#xff08…...

从ChatUI到AgentOS:下一代AIAgent交互范式迁移,3类企业已紧急重构前端架构

第一章:AIAgent架构人机交互界面设计的范式演进本质 2026奇点智能技术大会(https://ml-summit.org) 人机交互界面(HMI)在AIAgent架构中已从静态控件集合跃迁为动态语义协商场域,其演进本质并非UI组件的堆叠升级,而是认…...

AIAgent仿真环境搭建终极清单(2024Q3最新):覆盖Unity ML-Agents v4.0、Isaac Sim 2024.1、Meta’s Habitat 3.2 兼容矩阵与迁移路径

第一章:AIAgent架构中的仿真环境搭建 2026奇点智能技术大会(https://ml-summit.org) 仿真环境是AIAgent训练与验证的核心基础设施,它需精确复现真实世界的状态演化、动作反馈与多智能体交互逻辑。一个健壮的仿真环境不仅提供高保真物理/逻辑建模能力&am…...

Stable Diffusion+LoRA工作站教程:Pixel Fashion Atelier Leather-Dress集合调用

Stable DiffusionLoRA工作站教程:Pixel Fashion Atelier Leather-Dress集合调用 1. 像素时装锻造坊简介 像素时装锻造坊(Pixel Fashion Atelier)是一款基于Stable Diffusion与Anything-v5的图像生成工作站。它采用独特的复古日系RPG"明…...

保姆级教程:手把手教你为RTA-OS硬件Counter写那4个要命的回调函数(含避坑指南)

嵌入式工程师实战指南:RTA-OS硬件计数器回调函数开发全解析 在汽车电子控制单元(ECU)开发中,实时操作系统(RTOS)的精确时间管理能力直接关系到系统可靠性。作为符合AUTOSAR标准的实时操作系统,R…...

经典算法:打家劫舍(动态规划 + 回溯求最优解)C++ 超详细解析

前言打家劫舍是动态规划的入门经典题,核心考察无相邻元素选取的最大和问题。本文将基于 C 实现两种核心解法:动态规划(空间优化版):高效计算最大金额,时间 O (n),空间 O (1)回溯法:不…...

手把手教你让FAST_LIO用上Livox HAP:从驱动livox_ros_driver2到消息适配的保姆级教程

从零适配Livox HAP与FAST_LIO:完整实战指南 刚拿到Livox最新发布的HAP激光雷达时,许多开发者都会遇到一个典型问题:现有的SLAM算法如FAST_LIO无法直接兼容。这就像拿到最新款智能手机却发现常用APP还不支持——硬件先进却无法发挥全部潜力。本…...

从零入门性能测试:理论+JMETER实操,看完就能上手呈

一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...

卡梅德生物技术快报|多肽文库合成和筛选全流程技术实现(含参数与质控)

【技术干货】本文为卡梅德生物技术快报专属内容,聚焦多肽文库合成和筛选的工程化实现,基于生物载体展示技术,提供可复现、可落地的全流程方案,包含实验参数、质控标准、筛选逻辑,适合生物信息、合成生物学、高通量筛选…...

逆向思维搞定网络认证:我是如何通过‘杀掉’iNode进程实现Mac稳定上网的

逆向工程视角下的网络认证机制:从iNode进程管理看安全验证设计 当Mac电脑频繁遭遇iNode客户端的强制断网时,大多数用户会选择重新安装驱动或调整网络设置。但真正有趣的问题往往藏在表象之下——为什么在认证成功后终止特定进程,网络连接反而…...

【效率工具】XMind在Windows系统下的高效部署与核心操作指南

1. 为什么选择XMind提升工作效率 作为一个用了五年XMind的老用户,我深刻体会到这款思维导图工具对工作效率的颠覆性改变。记得第一次用XMind整理项目需求时,原本需要3小时梳理的复杂逻辑,只用40分钟就形成了清晰可视化的框架。这种思维可视化…...

保姆级教程:用Zabbix 6.0监控华为路由器,从SNMP配置到Web界面出图

企业级网络监控实战:Zabbix 6.0与华为路由器深度集成指南 在数字化转型浪潮中,网络设备的实时监控已成为企业IT运维的刚需。作为开源监控领域的标杆,Zabbix 6.0以其强大的数据采集和可视化能力,配合华为路由器稳定的硬件性能&…...

手把手调试RH850G3KH中断控制器:INTC1/INTC2寄存器配置避坑手册

手把手调试RH850G3KH中断控制器:INTC1/INTC2寄存器配置避坑手册 在汽车电子控制单元(ECU)开发中,中断处理的实时性和可靠性直接关系到系统稳定性。RH850G3KH作为Renesas旗舰级车规MCU,其双中断控制器架构(I…...

Java 从入门到精通(十四):多线程入门,为什么程序一并发就开始变得“不听话”?

Java 从入门到精通(十四):多线程入门,为什么程序一并发就开始变得“不听话”? 前一篇我们把 NIO 这条线讲清楚了:为什么 Java 后来不满足于传统 IO,为什么会引入 Path、Files、Buffer、Channel、…...

Sunshine开源游戏串流服务器:免费搭建跨平台低延迟游戏共享系统

Sunshine开源游戏串流服务器:免费搭建跨平台低延迟游戏共享系统 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源免费的自托管游戏串流服务器&#x…...

智能网速在线测试网站源码_宽带网速检测

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 智能网速在线测试网站源码_宽带网速检测 功能强大的PHP测速网页源码,旨在帮助用户快速、准确地测试网络速度。该源码可以直接部署在静态存储服务上,无需复杂的服务器配置&#xf…...

小语言模型基础:适合轻量化场景的 AI

文章目录小语言模型基础:适合轻量化场景的 AI一、啥是小语言模型?说白了就是"轻量级选手"二、2025-2026年SLM爆发:各大厂都在卷啥?2.1 微软Phi-4:数据质量党の胜利2.2 谷歌Gemma 3n:多模态小钢炮…...

主题巴巴主题源码 合辑打包下载+主题巴巴SEO插件 _ WordPress主题模版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 主题巴巴WordPress主题合辑打包下载,包含博客一号、博客二号、博客X、门户一号、门户手机版、图片一号、杂志一号、自媒体一号、自媒体二号和主题巴巴SEO插件。 主题巴巴WordPress主题合辑打…...

小龙虾 openclaw + 财务管理系统,自动化的财务管家来了~

一张表格管理自己的财务情况,对于每个超级个体来讲,都建议把上次分享的《人生 CEO 财务管理系统》带回家。在没有正式上线应用市场之前,已经 200 多人使用过了。特别适合想做一人公司或者超级个体的人。你不理财,财不理你。并且站…...