mysql常用SQL

清空数据表

在 MySQL 中,清空数据表的命令主要有两种:TRUNCATE TABLE 和 DELETE。它们虽然都能删除数据,但在底层机制和使用场景上有很大的区别。

1. 快速清空整张表:TRUNCATE TABLE

如果你需要快速删除表内的所有数据,并且不需要保留自增ID的计数,推荐使用此命令。

  • 基本语法 :TRUNCATE TABLE 表名;(TABLE 关键字可以省略)
  • 特点 :
    • 执行极快:它属于 DDL(数据定义语言)操作,本质上是直接删除并重新创建一张空表,不记录单行删除的日志。
    • 重置自增ID:表中的自增主键(AUTO_INCREMENT)会被重置为初始值(通常是1)。
    • 不可回滚:操作会隐式提交,执行后无法通过事务回滚恢复数据。
    • 不触发触发器:不会激活表上定义的 DELETE 触发器。

2. 按条件或安全删除:DELETE

如果你需要删除部分数据 ,或者希望操作具备可回滚性,应使用此命令。

  • 基本语法 :DELETE FROM 表名;(不带 WHERE 条件时清空全表)
  • 特点 :
    • 支持条件删除 :可以通过 WHERE 子句只删除满足特定条件的记录。
    • 事务安全:属于 DML(数据操纵语言),可以在事务中执行,支持回滚(ROLLBACK)。
    • 保留自增ID:删除数据后,自增主键的计数不会重置,新插入的数据会继续使用之前的自增值。
    • 触发触发器:删除操作会正常触发表上的 DELETE 触发器。

⚡️ 核心区别对比

为了让你更直观地了解两者的差异,可以参考下表:

对比项 TRUNCATE TABLE DELETE FROM
操作类型 DDL(数据定义语言) DML(数据操纵语言)
执行速度 极快(直接重建表) 较慢(逐行删除)
WHERE条件 不支持(只能清空全表) 支持(可删除指定行)
事务回滚 不可回滚 可回滚
自增ID 重置为初始值(如1) 不重置,继续累加
触发器 不触发 会触发

💡 避坑与安全建议

  1. 外键约束 :如果表被其他表的外键引用,TRUNCATE 通常会执行失败。此时需要先禁用外键检查或改用 DELETE。
  2. 生产环境慎用 :TRUNCATE 和 DELETE 都是高危操作。在生产环境中执行前,务必先备份重要数据,并仔细确认 WHERE 条件(如果使用 DELETE),以免造成不可挽回的数据丢失。
  3. 大表删除 :对于千万级以上的大表,直接使用 DELETE 可能会导致数据库锁表或性能骤降,建议采用分批删除的策略。
相关推荐
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
漂着的圆木3 天前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客3 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github