在SQL Server中,drop table和delete table有什么区别?

28
在SQL Server中,以下两种方式有什么区别:
  • 右键单击数据库对象(表/视图),选择删除表(即:生成脚本 -> 生成 DROP To -> 新的查询编辑器窗口)

  • 右键单击数据库对象(表/视图),选择删除。

我尝试了这两种方法,它们都执行相同的操作。为什么会有两个选项执行同样的操作?删除选项只是删除数据库对象的简单方式吗?
仅供参考 - 我正在使用SS2008。

1
很抱歉 - 我刚发现一个区别。在删除对象的GUI中,顶部有一个“脚本”选项,它提供了纯粹的drop table语句的t-sql语句。而当您选择drop table选项时,生成的t-sql仅在sys.objects表中存在该表时才执行drop操作。再次为提出这个问题道歉。请继续关闭此问题。 - Arnkrishn
12个回答

48

DROP会删除所有数据和表结构。

DELETE会删除数据,但表结构会保留,因此我们仍然可以回滚数据。此外,使用DELETE时可以使用where条件,例如只删除特定的记录。


15

在SQL Server 2005中,删除 表格删除 对象 是一样的操作。

删除表格删除对象不是一样的。前者会删除表格中所有的数据,而后者会从数据库中移除该表格。


谢谢Russ,但我想问题是关于“右键单击数据库对象(表/视图)并选择删除”。 - Nima Derakhshanjan

9

删除与删除表的区别。

  • Delete语句执行基于条件的删除,而Drop命令会删除表中的所有记录。

  • Delete语句仅删除表中的行,并保留表结构不变;而Drop命令删除表中的所有数据和表结构。

  • 删除操作可以回滚,不会自动提交,而Drop操作无法在任何情况下回滚,因为它是一个自动提交的语句。


2

其中一个执行删除操作,另一个提供TSQL脚本以执行删除操作,这样您就可以修改或在其他地方使用它。


是的,你说得对 :) 我没有以这种方式看待它 - 我的答案更加结果导向,而你注意到生成DROP语句可以进行一些手动更改,或者复制到脚本中,例如...我投票支持你的答案,干杯 :) - Michał Chaniewski

1

删除表格...它将从数据库中完全删除表格,无法恢复。 Delete 用于从表格中删除数据...可以使用 ROLL BACK 恢复数据。


1
另一个主要的区别在于,在DELETE中,它会遍历/扫描所有(基于谓词的条件)记录并进行删除。但是在DROP中,它将遍历记录,而不是从数据库中删除实际的表条目。如果我们查看Delete的执行计划:

enter image description here

如果是Drop命令,它不会遍历记录,也不会创建任何执行计划,因为它是DDL命令。


1

这两个操作是相同的。DROP TABLE 是 SQL 语句,Delete 是标准的、用户友好的、菜单驱动的命令名称。就是这样。


1
在删除对象的图形用户界面中,顶部有一个“脚本”选项,它提供了明确的drop表语句的t-sql语句。而当您选择删除表选项时,生成的t-sql将仅在sys.objects表中存在该表时执行删除操作。

0

删除表将会删除表的内容和表本身。 删除表只会删除表的内容。 截断将只是将内容“重置”为零


0

使用DELETE命令可以有条件地从表中删除行,但是可以通过使用COMMIT和ROLLBACK进行更改/撤消。表结构永远不会丢失。TRUNCATE是DELETE的替代方法,因为它允许删除行而不丢失表结构,但与DELETE不同,操作无法撤消。然而,DROP语句会完全从数据库中删除表及其结构,并且此操作无法撤消。因此,DELETE是DML语句,而TRUNCATE和DROP是DDL语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接