Mysql
主页 > 数据库 > Mysql >

MySQL中drop、truncate和delete的区别

2025-05-05 | 佚名 | 点击:

对于drop、truncate和delete,虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,今天来简单讲讲他们直接的区别。在此之前先简单了解下什么是DDL和DML。
DDL(数据定义语言,Data Definition Language):DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。DDL中常用的命令有:create,drop,alter,truncate和rename等等。
DML(数据操作语言,Data Manipulation Language):DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。DML中常用的命令有:insert,update,delete和select等等。

2.drop

DROP命令用于删除整个表(结构和数据),或数据库等对象,特点如下:

代码示例:

1

DROP TABLE employees;

注意:DROP语句执行后立即生效,无法找回。

3.truncate

TRUNCATE命令用于删除表中的所有行,其特点如下:

truncate会删除表中所有记录,并且将重新设置高水线和所有的索引。

就是truncate会删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子),缺省情况下将空间释放到minextents的extent(就是表结构中的段内的区域),除非使用reuse storage(使用这句话,所在的extent空间不会被回收,只是将数据删除掉,数据删除之后的freespace空间,只能供本表使用,其他的不可以使用)。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复

示例:

1

TRUNCATE TABLE employees;

注意:TRUNCATE语句执行后立即生效,无法找回。

4.delete

DELETE命令用于删除表中的一行或多行记录,具有如下特点:

选择性删除:可以通过WHERE子句指定删除哪些行。若不指定WHERE子句,则删除表中的所有行。

事务性操作:DELETE操作是事务安全的,这意味着你可以在一个事务中回滚DELETE操作。这在你意外删除了错误数据时非常有用。

触发器:如果表上有触发器,执行DELETE操作会触发它们。

性能:因为DELETE操作逐行删除数据,并记录日志,所以在删除大量数据时可能会比较慢。

示例:

1

DELETE FROM employees WHERE department = 'Sales';

5.总结

在速度上,一般来说,drop> truncate > delete。

原文链接:
相关文章
最新更新