天机阁

drop、delete、truncate区别

2022-07-12 · 3 min read
MySQL

用法不同

  • drop(丢弃数据):drop table 表名,直接将表都删除掉,在删除表结构的时候使用;
  • delete(删除数据):delete from 表名 where 列名=值,删除某一行的数据,如果不加 where 子句,作用和 truncate table 表名类似;
  • truncate(清空数据):truncate table 表名,只删除表中的数据,再插入数据的时候子增长 id 又从 1 开始,在清空表中数据的时候使用;

truncate 和 不带 where 子句的 delete,以及 drop 都会删除表内的数据,但 truncate 和 delete 只删除数据不删除表的结构,执行 drop 语句,此表的结构也会被删除。

属于不同的数据库语言

truncate 和 drop 都属于 DDL(数据定义语言)语句,操作立即生效。
delete 语句是 DML(数据库操作语言)语句,这个操作会放到 rollback segement 中,事务提交之后才生效。

DML 和 DDL 区别

  • DML 是数据库操作语言(Data Manipulation Language)的缩写,是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。
  • DDL 是数据定义语言(Data Definition Language)的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。它和 DML 语言的最大区别是 DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。DDL 语句更多的被数据库管理员(DBA)所使用,一般的开发人员很少使用。

由于 select 不会对表进行破坏,所以有的地方也会把 select 单独区分开叫做数据库查询语言(Data Query Language)

执行速度不同

一般来说,drop -> truncate -> delete

  • delete 命令执行的时候会产生数据库的 binlog 日志,而日志记录是需要消耗时间的,好处就是方便数据回滚;
  • truncate 命令执行的时候不会产生数据库日志,因此比 delete 要快。除此之外,还会把表的自增值重置和索引恢复到初始大小等;
  • drop 命令会把表占用的空间全部释放掉