DROP IF EXISTS VS DROP?

Может ли кто-нибудь сказать мне, есть ли разница между

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

Я спрашиваю об этом, потому что я использую шаблон JDBC в своем веб-приложении MVC. Если я использую DROP [TABLE_NAME], ошибка говорит о том, что таблица существует. И если я использую DROP IF EXISTS [TABLE_NAME], это говорит о плохой грамматике SQL. Может кто-нибудь помочь?

Ответ 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 с большой осторожностью.

Ответ 2

Это не то, что задают напрямую. Но, глядя, как правильно делать таблицы, я наткнулся на этот вопрос, поскольку, как я думаю, многие другие тоже делают.

Из 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; 

Ответ 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 просто ничего не делает.

Это полезно, если вы создаете/модифицируете свою базу данных с помощью script; таким образом, вам не нужно вручную проверять, чтобы предыдущие версии таблицы были удалены. Вы просто делаете DROP IF EXISTS и забываете об этом.

Конечно, ваш текущий механизм БД может не поддерживать эту опцию, сложно сообщить об ошибке с информацией, которую вы предоставляете.