web-dev-qa-db-fra.com

DROP SI EXISTS VS DROP?

Quelqu'un peut-il me dire s'il y a une différence entre

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

Je pose la question parce que j'utilise un modèle JDBC dans mon application Web MVC. Si j'utilise DROP [TABLE_NAME] l'erreur indique que la table existe. Et si j’utilise DROP IF EXISTS [TABLE_NAME], cela indique une mauvaise grammaire SQL. Quelqu'un peut-il aider?

153
AbdulAziz

La syntaxe SQL standard est

DROP TABLE table_name;

IF EXISTS n'est pas standard; différentes plates-formes peuvent le prendre en charge avec une syntaxe différente ou ne pas le prendre en charge du tout. Dans PostgreSQL, la syntaxe est la suivante:

DROP TABLE IF EXISTS table_name;

Le premier générera une erreur si la table n'existe pas ou si d'autres objets de base de données en dépendent. Le plus souvent, les autres objets de base de données seront des références de clé étrangère, mais il peut y en avoir d'autres également. (Vues, ​​par exemple.) La seconde ne générera pas d'erreur si la table n'existe pas, mais générera quand même une erreur si d'autres objets de base de données en dépendent.

Pour supprimer une table et tous les autres objets qui en dépendent, utilisez l’un d’eux.

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

Utilisez CASCADE avec le plus grand soin.

Ce n'est pas ce qui est demandé directement. Mais cherchant comment faire correctement les tables de dépôt, je suis tombé sur cette question, comme beaucoup d'autres, je suppose.

À partir de SQL Server 2016+, vous pouvez utiliser

DROP TABLE IF EXISTS dbo.Table

Pour SQL Server <2016, ce que je fais est le suivant pour une table permanente

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

Ou ceci, pour une table temporaire

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

Vous avez oublié le table dans votre syntaxe:

drop table [table_name]

qui laisse tomber une table.

En utilisant

drop table if exists [table_name]

vérifie si la table existe avant de la laisser tomber.
S'il existe, il est supprimé.
Sinon, aucune erreur ne sera générée et aucune action ne sera entreprise.

17
juergen d
DROP TABLE IF EXISTS [table_name]

il vérifie d’abord si la table existe, s’il supprime la table en

DROP TABLE [table_name]

il supprime sans vérification, donc s'il n'existe pas, il se termine avec une erreur

5
Flakron Bytyqi

Si aucune table portant ce nom n'existe, DROP échoue avec une erreur alors que DROP IF EXISTS ne fait rien.

Ceci est utile si vous créez/modifiez votre base de données avec un script; De cette façon, vous n'avez pas à vous assurer manuellement que les versions précédentes de la table sont supprimées. Vous venez de faire un DROP IF EXISTS et de l’oublier.

Bien sûr, votre moteur de base de données actuel peut ne pas prendre en charge cette option, il est difficile d’en savoir plus sur l’erreur avec les informations que vous fournissez.

4
SJuan76