在mysql中,删除的方式有3种,分别为delete、truncate、drop,下面对3种方式进行简单的分析其特点和使用的场景。
1、delete
delete用于删除表的部分或全部数据,使用语法如下
delete from table_name [where ...] [order by ...] [limit ...]
其中[]中的内容为可选命令。
示例
# 删除学生表中id为1的学生
delete from student where id = 1;
# 删除学生表中年龄最大的5名学生
delete from student order by age desc limit 5;
在innodb引擎中,delete操作并不是真正的把数据删除了,而是给数据打上删除标记。在使用delete删除数据之后并不会重置自增列为初始值。
2、truncate
truncate是用来删除表中全部数据,使用语法如下
truncate table table_name
示例
# 删除学生表中全部记录
truncate table student;
truncate在使用上和delete的最大区别是,delete可以使用条件删除部分数据,而truncate不能添加条件,只能删除全部数据。truncate是DDL语句,即数据定义语言,用来维护存储数据的结构指令,而delete语句是DML语句,即数据操作语言,用来对数据进行操作的。truncate本质上是新建了一个表结构,再把原表删除掉,所以truncate是DDL语言,而非DML语言。truncate在innodb引擎中会重置自增列为初始值。
3、drop
drop删除整张表的行数据和表结构,语法如下
drop table table_name [,table_name]
示例
# 删除学生表
drop table student;
4、三者区别
- 数据恢复:delete删除的数据可以恢复,而truncate和drop不可以;
- 执行速度:drop>truncate>delete;
- 数据删除:drop是删除整张表包括数据和表结构,而truncate和delete只是删除了行数据;
- 重置自增列:在innodb引擎中,truncate可以重置自增列,而delete不能重置自增列;