浅析MySQL删除方法:delete、truncate、drop的区别

文 / @UTHEME

MySQL是目前最常用的关系型数据库管理系统,删除数据是常见的操作之一,MySQL提供了三种删除数据的方法:delete、truncate、drop。这三种方法的使用场景和效果不同,下面我们就来一一分析。

1. delete

delete可用于删除表的部分或所有数据,可以使用where表达式添加查询条件,如delete from table_name where age>18。但需要注意的是,在InnoDB引擎中,delete操作并不是真的把数据删除掉,而是给数据打上删除标记,标记为删除状态。为了验证这点,我们可以将MySQL设置为非自动提交模式,在进行delete操作后,使用rollback回滚操作,最后验证之前删除的数据是否还存在,如果数据还存在,就说明delete并没有真的将数据删除掉,只是标识数据为删除状态。此外,在InnoDB引擎中,使用delete删除所有的数据之后,并不会重置自增列为初始值。

2. truncate

truncate和delete类似,也是用来删除表中的所有行数据的,但它不能加条件表达式,只能删除所有的行数据,比如truncate table_name。需要注意的是,truncate虽然看似只删除了行数据,但它是DDL语句,作用是用来维护存储数据的结构。truncate本质上是新建了一个表结构,再把原先的表删除掉,所以它属于DDL语言,而非DML语言。在InnoDB引擎中,truncate会重置自增列。

3. drop

drop会把整张表的行数据和表结构一起删除掉,可以使用drop table table_name来删除表。需要注意的是,drop是不可恢复的,一旦删除数据,就无法恢复。

根据实际场景选择删除命令。在执行效率上,drop>truncate>delete。而在删除数据方面,drop是删除整张表,包含行数据和字段、索引等数据,而truncate和delete只删除了行数据。此外,只有delete删除的数据可以被恢复,而truncate和drop是不可恢复的。因此,在使用truncate和drop这些不可恢复数据的删除方式时,要小心谨慎。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。