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