DROP IF EXISTS VS DROP?

Abd*_*ziz 158 sql drop-table

有人能告诉我两者之间是否有任何区别

DROP IF EXISTS [TABLE_NAME]
Run Code Online (Sandbox Code Playgroud)
DROP [TABLE_NAME]
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ll' 282

标准SQL语法是

DROP TABLE table_name;
Run Code Online (Sandbox Code Playgroud)

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

DROP TABLE IF EXISTS table_name;
Run Code Online (Sandbox Code Playgroud)

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

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

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;
Run Code Online (Sandbox Code Playgroud)

请谨慎使用CASCADE.

  • 我只是想提一下,在一个事务块(`BEGIN` ...`COMMIT`)中使用`CASCADE`是一个非常好的**好主意.通过这种方式,很清楚数据库将如何受到影响_可能会破坏您可能不想要的大量数据. (6认同)
  • DROP IF EXISTS(不带CASCADE)也在SQL Server 2016中添加.请参阅http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in- SQL服务器,2016.aspx (3认同)

Squ*_*azz 35

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

从SQL Server 2016+可以使用

DROP TABLE IF EXISTS dbo.Table
Run Code Online (Sandbox Code Playgroud)

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

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 
Run Code Online (Sandbox Code Playgroud)

或者,这是一个临时表

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 
Run Code Online (Sandbox Code Playgroud)


jue*_*n d 17

您忘记了 table语法:

drop table [table_name]
Run Code Online (Sandbox Code Playgroud)

放下一张桌子.

运用

drop table if exists [table_name]
Run Code Online (Sandbox Code Playgroud)

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


Fla*_*yqi 5

DROP TABLE IF EXISTS [table_name]
Run Code Online (Sandbox Code Playgroud)

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

DROP TABLE [table_name]
Run Code Online (Sandbox Code Playgroud)

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