MySQL中RUNCATE、DELETE、DROP 的基本介绍

TRUNCATE、DELETE、DROP 的基本介绍

TRUNCATE

TRUNCATE 是一种 DDL(数据定义语言)操作,用于快速清空表中的所有数据,但保留表结构(如列、约束、索引等)。执行后,表的自增计数器会重置,且操作无法回滚(除非在事务中且数据库支持)。

DELETE

DELETE 是 DML(数据操纵语言)操作,用于删除表中的指定行或所有行。支持 WHERE 子句筛选数据,操作可回滚(通过事务),但不会重置自增计数器。DELETE 会逐行删除数据,触发触发器。

DROP

DROP 是 DDL 操作,用于完全删除表(包括表结构、数据、索引、权限等)。执行后表不可恢复,空间立即释放,且不触发触发器。


三者的主要区别

  1. 操作类型

    • TRUNCATE 和 DROP 是 DDL 操作。
    • DELETE 是 DML 操作。
  2. 功能范围

    • TRUNCATE 仅清空数据,保留表结构。
    • DELETE 可删除部分或全部数据,保留表结构。
    • DROP 彻底删除表及其所有关联对象。
  3. 事务与回滚

    • TRUNCATE 在大多数数据库中不可回滚(但 MySQL 若在事务中执行可回滚)。
    • DELETE 支持事务,可回滚。
    • DROP 不可回滚。
  4. 性能

    • TRUNCATE 比 DELETE 更快(不记录逐行删除日志,直接释放数据页)。
    • DROP 最快(直接删除元数据和文件)。
  5. 触发器与约束

    • TRUNCATE 不触发 DELETE 触发器。
    • DELETE 会触发触发器并检查约束(如外键)。
    • DROP 不触发任何触发器。
  6. 自增字段

    • TRUNCATE 重置自增计数器。
    • DELETE 保留自增计数器的当前值。

使用场景示例

TRUNCATE

需要快速清空一个大表且无需保留自增计数:

sql 复制代码
TRUNCATE TABLE employees;

DELETE

删除符合条件的数据或需要事务控制时:

sql 复制代码
DELETE FROM employees WHERE department = 'HR';

DROP

彻底删除不再需要的表:

sql 复制代码
DROP TABLE temp_data;

注意事项

  • 权限要求:TRUNCATE 和 DROP 通常需要更高权限(如 DDL 权限)。
  • 外键约束:TRUNCATE 可能因外键约束失败(需先禁用约束或使用 DELETE)。
  • 备份:执行 DROP 前务必确认数据已备份。
相关推荐
hey you~6 小时前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
夜雪一千6 小时前
MySQL 数据字典如何获得
数据库·mysql
系统集成-鹰翔6 小时前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping6 小时前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
honsor6 小时前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
赵渝强老师6 小时前
【赵渝强老师】YashanDB Developer Center(YDC,崖山数据库开发者中心)
数据库·国产数据库·yashandb·崖山数据库
lusklusklusk6 小时前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
Leo.yuan6 小时前
企业业务人员如何独立完成数据分析?2026年自助BI工具选型与应用指南
大数据·数据库·人工智能
roman_日积跬步-终至千里6 小时前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模