暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL面试题:SQL 中 DELETE 与 DROP 与 TRUNCATE 的区别

原创 小小亮 2022-12-14
693

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 中移回,但可以在OracleSQL ServerPostgreSQL中移回。


在 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

最后修改时间:2022-12-14 11:17:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论