有人能告诉我两者之间是否有任何区别吗?
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
我之所以提出这个问题,是因为我在我的MVC Web应用程序中使用JDBC模板。如果我使用DROP [TABLE_NAME]
,错误会说表已存在。但如果我使用DROP IF EXISTS [TABLE_NAME]
,它会显示坏的SQL语法。有人可以帮忙吗?
有人能告诉我两者之间是否有任何区别吗?
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
我之所以提出这个问题,是因为我在我的MVC Web应用程序中使用JDBC模板。如果我使用DROP [TABLE_NAME]
,错误会说表已存在。但如果我使用DROP IF EXISTS [TABLE_NAME]
,它会显示坏的SQL语法。有人可以帮忙吗?
标准 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需要非常小心。
BEGIN
...COMMIT
)中使用CASCADE
将是一个非常好的主意。这样,在潜在地覆盖一堆不希望被覆盖的数据之前,清楚地了解数据库将受到的影响。 - jbowman虽然这不是直接要求的内容,但当我在寻找如何正确删除表时,我偶然发现了这个问题,我猜其他人也会遇到同样的情况。
从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;
你的语法中忘记了table
标签:
drop table [table_name]
删除表的方法。
使用:
drop table if exists [table_name]
在删除表之前检查它是否存在。
如果存在,则删除它。
如果不存在,则不会产生错误并且不会采取任何操作。
DROP TABLE IF EXISTS [table_name]
首先,它会检查表是否存在,如果存在则删除该表。
DROP TABLE [table_name]
该命令在没有检查的情况下进行删除操作,因此如果文件不存在,则会出现错误并退出。
DROP
将失败并显示错误,而 DROP IF EXISTS
则不会有任何操作。DROP IF EXISTS
并忘记它即可。drop some_table if exists;
但表some_table
不存在,则会抛出警告。 - user554546DROP
需要您指定对象的类型(在这种情况下为 TABLE
)。 - SJuan76