DROP IF EXISTS VS DROP?

时间:2012-03-05 11:26:08

标签: sql drop-table

有人可以告诉我

之间是否有任何区别
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

我问这个是因为我在我的MVC Web应用程序中使用JDBC模板。如果我使用DROP [TABLE_NAME]错误表示表存在。如果我使用DROP IF EXISTS [TABLE_NAME]它会说错误的SQL语法。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:270)

标准SQL语法是

DROP TABLE table_name;

IF EXISTS不是标准的;不同的平台可能会以不同的语法支持它,或根本不支持它。在PostgreSQL中,语法是

DROP TABLE IF EXISTS table_name;

如果表不存在,或者其他数据库对象依赖于它,则第一个将抛出错误。大多数情况下,其他数据库对象将是外键引用,但也可能有其他数据库对象。 (例如,视图。)如果表不存在,第二个不会抛出错误,但如果其他数据库对象依赖它,它仍然会抛出错误。

要删除一个表以及依赖它的所有其他对象,请使用其中一个。

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

小心使用CASCADE。

答案 1 :(得分:35)

这不是直接询问的。但是在寻找如何正确地删除表格时,我偶然发现了这个问题,因为我猜其他人也这样做了。

从SQL Server 2016+开始,您可以使用

DROP TABLE IF EXISTS dbo.Table

对于SQL Server< 2016,我所做的是永久表的以下内容

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

或者,对于临时表

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

答案 2 :(得分:17)

您忘记了语法中的table

drop table [table_name]

放下一张桌子。

使用

drop table if exists [table_name]

在删除表之前检查表是否存在 如果它存在,它就会掉线 如果没有,则不会抛出任何错误,也不会采取任何措施。

答案 3 :(得分:5)

DROP TABLE IF EXISTS [table_name]

它首先检查表是否存在,如果存在则删除表 而

DROP TABLE [table_name]

它会在没有检查的情况下删除,因此如果它不存在,则退出并显示错误

答案 4 :(得分:4)

如果不存在具有此类名称的表格,则DROP会失败并显示错误,而DROP IF EXISTS则不执行任何操作。

如果使用脚本创建/修改数据库,这将非常有用;这样您就不必手动确保删除该表的先前版本。你只需要做DROP IF EXISTS而忘记它。

当然,您当前的数据库引擎可能不支持此选项,很难通过您提供的信息更多地了解错误。