SQL 中 DROP vs DELETE vs Truncate 的区别

2025年2月3日 | 阅读 3 分钟

在本文中,我们将详细介绍 SQL 中 Drop、Delete 和 Truncate 语句的区别及其语法。这些语句听起来很相似,但它们的功能和方法论是不同的。

Difference between DROP vs DELETE vs Truncate in SQL
  • Drop 语句:这是一个数据定义语言语句。它用于永久删除对象和数据。Drop 语句也与 alter 语句一起用于数据操作。

语法

使用上面的语法,我们将永久删除带有数据的表。

语法

在上面的语句中,我们使用了 ALTER 语句和 drop 语句来删除带有数据的列。

  • DELETE 语句:这是一个数据操纵语言语句。它用于从表中删除行,而不影响表的模式或结构。通过使用“WHERE”条件,我们还可以指定要删除的行数。它不会删除表的模式或结构。

语法

在上面的语法中,我们将通过指定表名来删除表中的行。

语法

在上面的语法中,我们将使用 where 语句根据指定的条件或范围删除表中的行。

  • TRUNCATE:它是一个数据定义语言语句,用于比 DELETE 语句更快地删除表中的所有行。它不会删除表结构。

语法

在上面的语法中,我们将删除表中的所有行,而不更改表结构或模式。

以下是 SQL 中 Drop、Delete 和 Truncate 语句的表格差异。

基本功能DROPDELETETRUNCATE
1. 目的DROP 语句主要用于删除整个数据库对象,例如表、数据库、视图等。delete 语句主要用于根据特定条件删除表中的特定行。truncate 语句主要用于删除现有表中的所有行,同时保持数据库结构。
2. 存储DROP 语句释放表在内存中占用的空间。delete 语句不释放表在内存中占用的空间。truncate 语句不释放表在内存中占用的空间。
3. SQL 语言此语句使用 SQL 的数据定义语言。此语句使用 SQL 的数据操纵语言。此语句也使用 SQL 的数据定义语言。
4. 回滚语句它直接作用于实际的数据库对象,因此使用 DROP 语句执行的操作无法回滚。此语句不作用于实际的数据库对象,因此使用此语句执行的操作可以回滚。使用 truncate 语句后无法恢复数据,因此无法回滚已执行的语句。
5. 完整性约束完整性约束会在 Drop 语句执行时被移除。完整性约束在 Delete 语句中保持不变。使用 Truncate 语句时,完整性约束将保持不变。
6. 子句的使用DROP 语句不需要任何子句。Delete 语句使用“where”子句。Truncate 语句不使用“where”子句。
7. 重置 ID执行 DROP 语句后,不会应用 ID 的自动增量重置。执行 DELETE 语句后,ID 不会根据自动增量进行重置。在 truncate 语句中,这取决于使用的数据库引擎。例如:在 Oracle 中不会,但在 PostgreSQL 中将取决于用户。
8. 空间要求它也需要更多空间。它需要更多空间。它需要的空间更少。
9. 保持结构drop 语句不保留任何结构,它会完全从内存中移除所有对象。delete 语句保持表的结构。truncate 语句也保持表结构。
10. 速度DROP 语句速度很快,因为它只需一次操作即可删除整个对象。delete 语句的速度取决于删除的行数和执行语句的复杂性。对于大表,truncate 语句比 DELETE 语句快,因为它不是逐行删除的。
11. 触发器不触发触发器Delete 语句会触发触发器。使用 Truncate 语句不触发触发器。