Quelqu'un peut-il me dire s'il y a une différence entre
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
Je demande cela parce que j'utilise le modèle JDBC dans mon application Web MVC. Si j'utilise DROP [TABLE_NAME]
l'erreur dit que la table existe. Et si je l'utilise, DROP IF EXISTS [TABLE_NAME]
cela dit une mauvaise grammaire SQL. Quelqu'un peut-il aider?
sql
drop-table
AbdulAziz
la source
la source
Réponses:
La syntaxe SQL standard est
IF EXISTS
n'est pas standard; différentes plates-formes peuvent le prendre en charge avec une syntaxe différente, ou ne pas le supporter du tout. Dans PostgreSQL, la syntaxe estLe premier lancera 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.) Le second ne lèvera pas d'erreur si la table n'existe pas, mais il lèvera toujours 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'entre eux.
Utilisez CASCADE avec grand soin.
la source
CASCADE
dans un bloc de transaction (BEGIN
...COMMIT
). De cette façon, il est clair comment la base de données sera affectée avant de potentiellement écraser un tas de données que vous n'auriez peut-être pas voulu.Ce n'est pas ce qui est demandé directement. Mais en cherchant comment faire correctement les tables de dépôt, je suis tombé sur cette question, comme je suppose que beaucoup d'autres le font aussi.
À partir de SQL Server 2016+, vous pouvez utiliser
Pour SQL Server <2016, ce que je fais est ce qui suit pour une table permanente
Ou ceci, pour une table temporaire
la source
Vous avez oublié le
table
dans votre syntaxe:qui fait tomber une table.
En utilisant
vérifie si la table existe avant de la supprimer.
S'il existe, il est abandonné.
Sinon, aucune erreur ne sera générée et aucune action ne sera entreprise.
la source
il vérifie d'abord si la table existe, s'il le fait, il supprime la table en
il supprime sans vérification, donc s'il n'existe pas il se termine avec une erreur
la source
Si aucune table avec un tel nom n'existe,
DROP
échoue avec une erreur alorsDROP IF EXISTS
que 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 du tableau sont supprimées. Vous faites juste un
DROP IF EXISTS
et oubliez ça.Bien sûr, votre moteur de base de données actuel peut ne pas prendre en charge cette option, il est difficile d'en dire plus sur l'erreur avec les informations que vous fournissez.
la source
drop some_table if exists;
et que la tablesome_table
n'existe pas.DROP
a besoin que vous spécifiiez le type d'objet (TABLE
dans ce cas)