首页 >> 基础教程

mysql中drop、delete 与 truncate 的区别?

      在 MySQL 中,DROPDELETE 和 TRUNCATE 都是数据删除操作,但它们在功能、性能和影响上存在显著区别。以下是详细对比:

1. DELETE

  • 作用
    删除表中指定的行(可带条件)。

  • 语法

    • DELETE FROM 表名 [WHERE 条件];


  • 特点

    • DML 命令(数据操作语言),操作可回滚(需在事务内)。

    • 逐行删除,产生大量事务日志,性能较慢(尤其大数据量时)。

    • 不释放表空间(仅标记删除,后续可插入新数据)。

    • 不重置自增列(AUTO_INCREMENT)
      例如:当前自增值为 100,删除所有数据后,新插入的数据自增值从 101 开始。

    • 触发触发器(如定义 BEFORE/AFTER DELETE 触发器)。

    • 支持事务:操作可回滚(ROLLBACK)。

2. TRUNCATE

  • 作用
    删除表中所有数据(不可带条件)。

  • 语法

    • TRUNCATE TABLE 表名;
  • 特点

    • DDL 命令(数据定义语言),隐式提交事务(不可回滚❗)。

    • 直接删除数据页(物理删除),性能极快。

    • 释放表空间(重置表为初始状态)。

    • 重置自增列(AUTO_INCREMENT) 
      例如:自增值重置为 1,新插入数据从 1 开始。

    • 不触发触发器(因不记录逐行删除)。

    • 需要表级锁(操作期间锁定整个表)。

3. DROP

  • 作用
    删除整个表(包括结构、数据、索引、权限等)。

  • 语法

    • DROP TABLE 表名;

  • 特点

    • DDL 命令,隐式提交事务(不可回滚)。

    • 彻底删除表(表在数据库中消失)。

    • 释放所有关联资源(表空间、索引等)。

    • 不触发触发器(因直接删除元数据)。

    • 需重新创建表才能再次使用。

下面是这3个命令的使用场景:

  • 删除部分数据 → 用 DELETE ... WHERE ...

  • 快速清空全表数据 → 用 TRUNCATE TABLE(注意不可回滚!)

  • 彻底删除表(不需要该表时) → 用 DROP TABLE

tips: TRUNCATE 和 DROP 会立即生效且无法回滚,操作前务必确认数据安全!


最新文章
InnoDB 和 MyISAM 主要有什么区别?2025-07-06
mysql存储引擎应该怎么选择?2025-07-06
mysql的几种存储引擎2025-07-06
MySQL 的段区页行2025-07-06
一条更新语句是如何执行的?2025-07-06
mysql中一条查询语句是如何执行的?2025-07-02
MySQL基础架构及执行流程解析2025-07-02
MySQL SQL语法树解析过程详解2025-07-02
mysql中SQL 的隐式数据类型转换?2025-07-01
MySQL 第 3-10 条记录怎么查?2025-06-30
备案号:蜀ICP备2023042032号-1