首页 >> 基础教程
mysql中drop、delete 与 truncate 的区别?
在 MySQL 中,DROP
、DELETE
和 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