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?
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?
Réponses:
MySQL ALTER TABLE
n'a pas de IF 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 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.
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
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
Bonus, cela fonctionne aussi pour MODIFY
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
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:
SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
Cela ci-dessous a fonctionné pour moi:
SELECT count(*)
INTO @exist
FROM information_schema.columns
WHERE table_schema = 'mydatabase'
and COLUMN_NAME = 'mycolumn'
AND table_name = 'mytable' LIMIT 1;
set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable` ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
'select \'Column Exists\' status');
prepare stmt from @query;
EXECUTE stmt;