✅truncate、delete、drop的区别?

典型回答

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 DML 记录 Y Y Y N
TRUNCATE DDL 记录 N N N Y
DROP DDL 记录+表结构 N N N 表都没了

扩展知识

DROP之后有办法恢复吗?

DROP操作非常危险,并且是不可逆的。一旦执行了,数据和表结构就会被立即删除。想要恢复非常困难,可以有以下几个方式,但是不见得一定能100%恢复:

  1. 数据库备份:如果你定期备份数据库,可以从最近的备份中恢复丢失的表。
  2. bin log:如果MySQL服务器的二进制日志被启用并且在删除表之前已经记录了所有更改,理论上可以通过这些日志恢复数据。这需要重放日志文件直到删除操作之前的点。
  3. 数据恢复工具:存在一些专门的数据恢复工具,如 Percona Data Recovery Tool for InnoDB,这些工具可以在某些情况下帮助恢复删除的InnoDB表。但是,这些方法通常技术要求高,且不能保证100%恢复。
  4. 文件系统备份:如果数据库文件所在的文件系统被备份,那么可以尝试从文件系统备份中恢复整个数据库目录。

原文: https://www.yuque.com/hollis666/xkm7k3/uvulgtf6wbgpfx14