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?
MySQL ALTER TABLE
n'a pas 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:
SELECT column_name
DE INFORMATION_SCHEMA
.COLUMNS
OERE TABLE_SCHEMA
= [Nom de la base de données] ET 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.
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;