MySQL: Comment créer une colonne s'il n'existe pas?
13
J'essaie de créer une colonne pour ma table uniquement si elle n'existe pas. J'ai fait beaucoup de recherches mais je n'ai pas encore trouvé de solution.
Est-il vraiment possible de créer une colonne de manière conditionnelle?
Je suis curieux ... Qu'y a-t-il de mal à simplement laisser l'alter échouer en cas d'erreur si la colonne existe déjà?
Derek Downey
En fait, je dois fournir un fichier .sql à mon client qui aurait toutes les requêtes liées aux changements de structure de base de données. Je ne peux pas leur envoyer une base de données entière. Je veux juste leur envoyer des modifications db. il y a beaucoup plus de requêtes dans ce fichier sql. Si cette requête sur la création de colonnes échoue, toutes les requêtes échouent. C'est pourquoi je veux utiliser la condition if pour créer une colonne.
zzzzz
Si votre base de données le prend en charge, vous pouvez utiliser un déclencheur. AVANT D'INSÉRER.
cybernard
Réponses:
7
MySQL ALTER TABLEn'a pas de IF EXISTSspécification.
Vous pouvez effectuer les opérations suivantes en utilisant un proc stocké ou un langage de programmation si c'est quelque chose que vous devrez faire régulièrement:
Pseudocode:
Trouvez si la colonne existe en utilisant le SQL ci-dessous:
CHOISIR À column_name
PARTIR DE INFORMATION_SCHEMA. COLUMNS
WHERE TABLE_SCHEMA= [Nom de la base de données] AND TABLE_NAME= [Nom de la table];
Si la requête ci-dessus renvoie un résultat, cela signifie que la colonne existe, sinon vous pouvez continuer et créer la colonne.
Dans MySQL / MariaDB, j'obtiens une erreur en utilisant cette requête, déclarant qu'elle column_namen'existe pas. J'ai reformulé la requête pour:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Pour une réponse simple 0 ou 1 sur MySQL et (je pense) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo
13
Existe actuellement pour Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bonus, cela fonctionne aussi pour MODIFY
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Réponses:
MySQL
ALTER TABLE
n'a pas deIF EXISTS
spécification.Vous pouvez effectuer les opérations suivantes en utilisant un proc stocké ou un langage de programmation si c'est quelque chose que vous devrez faire régulièrement:
Pseudocode:
Trouvez si la colonne existe en utilisant le SQL ci-dessous:
CHOISIR À
column_name
PARTIR DEINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
= [Nom de la base de données] ANDTABLE_NAME
= [Nom de la table];Si la requête ci-dessus renvoie un résultat, cela signifie que la colonne existe, sinon vous pouvez continuer et créer la colonne.
la source
column_name
n'existe pas. J'ai reformulé la requête pour:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
Existe actuellement pour Maria DB 10.219
Bonus, cela fonctionne aussi pour MODIFY
la source
Vous pouvez utiliser cette solution, déjà mentionnée sur une autre publication StackOverFlow: (Réf .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE pour ajouter une colonne si elle n'existe pas:
la source
Cela ci-dessous a fonctionné pour moi:
la source