MySQL 数据库中的 TRUNCATE、DELETE 和 DROP 是用于删除数据的三个不同命令。
DELETE 用于删除表中的一行或多行记录,它可以与 WHERE 子句一起使用来指定要删除的记录。
TRUNCATE 用于快速删除表中的所有记录,并重置任何自增的计数器(如自增的主键)。
DROP 用于删除整个表结构及其数据。
这三个操作中,DROP 是最彻底的,它不仅删除表中的数据,还删除表结构,并且操作不可撤销。
这三个操作中,DELETE 是最慢的,因为它在操作过程中会记录 binlog,并且它是在事务中的,可以做回滚。
这三个操作中,DELETE 可以和 WHERE 一起用,可以设置筛选条件,而 DROP 和 TRUNCATE 不可以增加筛选条件。
这三个操作中,TRUNCATE 和 DROP 是 DDL(数据定义语言)操作,而 DELETE 是 DML(数据操作语言)操作。
这三个操作中,DELETE 操作删除表中记录后,自增 ID 不会重置,而 TRUNCATE 操作则会重新从 1 开始自增。
| 操作类型 | 删除内容 | 记录日志 | 支持回滚 | 支持 WHERE | 速度 | 主键重置 |
| DELETE | 记录 | Y | Y | Y | 慢 | N |
| TRUNCATE | 记录 | N | N | N | 快 | Y |
| DROP | 记录+表结构 | N | N | N | 快 | 表都没了 |