【问题标题】:DROP IF EXISTS VS DROP?如果存在则丢弃 VS 丢弃?
【发布时间】:2012-03-05 11:26:07
【问题描述】:

谁能告诉我两者有什么区别

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

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

【问题讨论】:

标签: sql drop-table


【解决方案1】:

标准 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。

【讨论】:

  • 只是想我会提到在一个事务块中使用CASCADE 将是一个真的 的想法 (@987654327 @ ... COMMIT)。通过这种方式,可以清楚地知道数据库将如何受到影响之前可能会破坏您可能不想破坏的一堆数据。
  • DROP IF EXISTS(没有 CASCADE)也在 SQL Server 2016 中添加。请参阅blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/…
【解决方案2】:

这不是直接问的。但是在寻找如何正确放置表时,我偶然发现了这个问题,我想很多其他人也是。

从 SQL Server 2016+ 你可以使用

DROP TABLE IF EXISTS dbo.Table

对于 SQL Server

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; 

【讨论】:

    【解决方案3】:

    您忘记了语法中的table

    drop table [table_name]
    

    删除一个表。

    使用

    drop table if exists [table_name]
    

    在删除表之前检查表是否存在。
    如果存在,则会被丢弃。
    如果不是,则不会抛出错误,也不会采取任何措施。

    【讨论】:

      【解决方案4】:
      DROP TABLE IF EXISTS [table_name]
      

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

      DROP TABLE [table_name]
      

      它不检查就删除,所以如果它不存在,它会报错退出

      【讨论】:

        【解决方案5】:

        如果不存在具有该名称的表,DROP 将失败并出现错误,而 DROP IF EXISTS 什么也不做。

        如果您使用脚本创建/修改数据库,这很有用;这样,您不必手动确保删除表的先前版本。您只需执行 DROP IF EXISTS 并忘记它。

        当然,您当前的数据库引擎可能不支持此选项,您提供的信息很难进一步说明错误。

        【讨论】:

        • 值得一提的是,如果您尝试 drop some_table if exists; 并且表 some_table 不存在,某些 RDBMS(尤其是 PostgreSQL)会抛出警告。
        • 啊,当然 juegen d 和 Flakron 是对的。 DROP 需要您指定对象的类型(在这种情况下为TABLE
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 2020-01-17
        • 2019-12-27
        • 1970-01-01
        相关资源
        最近更新 更多