Delete、Drop、Truncate命令之间有什么区别,想必是SQL面试中最流行的查询之一。我们在这里回答您关于这个面试问题的任何问题。在本文中,我们将回顾这个概念并以非常实用的方式了解它们之间的区别。
以下是 SQL 中 Truncate、Delete 和 Drop 命令之间的主要区别:
1.DELETE
本质上,它是一种数据操作语言命令 (DML)。它用于擦除表中的至少一个元组。在“删除”命令的帮助下,我们可以一次性删除每一列,也可以单独删除行。也就是说,我们可以根据使用“ WHERE”子句的先决条件或条件来使用它。它几乎比 TRUNCATE 命令慢。
删除命令的工作!
DELETE 返回从表中删除的行数。
尽管如此,DELETE 在执行期间使用行锁并且可以回滚。在这里我们可以使用“ROLLBACK”命令来恢复元组,因为它不会自动提交。
DELETE 可以由触发器执行。可以在 DELETE 命令之前、之后或代替 DELETE 命令调用触发器。删除另一个表中的元组也可以触发(触发)DELETE。
显然,要涉及 DELETE 命令,您需要对该表的 DELETE 权限。
语法:
删除表“table_name”中的所有行:
DELETE table table_name;
根据条件“COND”从表“table_name”中删除特定行:
DELETE from table_name WHERE COND;
示例:
假设有一个客户表如下:

在应用查询“DELETE FROM customers WHERE CustomerName='Alfreds Futterkiste'”时,名为 Alfreds Futterkiste 的客户的信息(元组)被删除。

2. DROP
它是一种数据定义语言命令 (DDL),用于删除整个表。在“DROP”命令的帮助下,我们可以一次性删除(擦除)整个设计(表),例如它消除了模式的命名元素。通过使用此命令,整个表的存在完成或丢失。
DROP TABLE 活动删除表定义和信息以及与表相关的列表、命令和触发器。此命令释放内存空间。执行 DROP TABLE 时不会终止任何触发器。此活动无法在 MySQL 中移回,但可以在Oracle、SQL Server和PostgreSQL中移回。
在 SQL Server 中,DROP TABLE 需要 ALTER 同意表的组成;MySQL 需要 DROP 荣誉;Oracle 需要 DROP ANY TABLE 荣誉。在 PostgreSQL 中,客户端可以删除自己的表。
语法:
如果我们想删除整个表“table_name”:
DROP table table_name
3. TRUNCATE
TRUNCATE TABLE 类似于 DELETE,但是,此活动是一个 DDL(数据定义语言)命令。它同样从表中删除记录而不删除表结构,但它不使用 WHERE 语句。请谨慎使用此命令。TRUNCATE 事务可以在 SQL Server 和 PostgreSQL 等数据集引擎中回滚,但不能在 MySQL 和 Oracle 中回滚。
TRUNCATE 比 DELETE 更快,因为它在删除记录之前不检查每条记录。TRUNCATE TABLE 锁定整个表以从表中删除信息;随后,该命令同样比 DELETE 使用更少的交换空间。
与 DELETE 不同,TRUNCATE 不返回从表中删除的列数。它还将表格自动增加值重置为初始值(通常为 1)。如果您在缩短表格后添加一条记录,它的 ID = 1。注意:在 PostgreSQL 中,您可以决定重新启动或继续自动增加价值。Prophet 利用继承来增加值,这不会被 TRUNCATE 重置。
显然,您确实需要授权使用 TRUNCATE TABLE。在 PostgreSQL 中,您需要荣誉 TRUNCATE;在 SQL Server 中,基本权限是 ALTER 表;在 MySQL 中,您需要 DROP 荣誉。最后,Oracle 要求 DROP ANY TABLE 框架荣誉使用此命令。
语法:
要截断表“table_name”:
TRUNCATE table_name;
示例:
考虑以下客户表:

在运行查询“TRUNCATE table CUSTOMERS”然后按如下方式运行时,我们得到空的 CUSTOMERS 表:


哪个命令最适合哪个用例?
- 要删除特定行: 使用 DELETE TABLE 命令。
- 要从一个巨大的表中删除所有列并保留表结构,请使用 TRUNCATE TABLE。它比删除更快。
- 要删除整个表,包括其构造和信息,请使用 DROP TABLE。
现在我们知道了 SQL 查询中 TRUNCATE、DELETE 和 DROP COMMAND 之间的主要区别,请记住 TRUNCATE 和 DROP 是 DDL;尽管 DELETE 命令是一个 DML。DELETE 与 TRUNCATE 与 DROP 之间的对比将帮助您评估这些命令的利用率和进一步应用。
因此,虽然您可以使用 DELETE 命令从表中删除一行或多行,但在特定情况下,您可能必须使用 TRUNCATE 命令重置表。
原文标题:Difference between DELETE vs DROP vs TRUNCATE in SQL
原文链接:https://www.sqlrevisited.com/2022/08/delete-vs-drop-vs-truncate-in-sql.html




