Sto cercando di creare una colonna per la mia tabella solo se non esiste. Ho fatto molte ricerche ma non ho ancora trovato alcuna soluzione.
È davvero possibile creare una colonna in modo condizionale?
Sto cercando di creare una colonna per la mia tabella solo se non esiste. Ho fatto molte ricerche ma non ho ancora trovato alcuna soluzione.
È davvero possibile creare una colonna in modo condizionale?
Risposte:
MySQL ALTER TABLE
non ha IF EXISTS
specifiche.
Puoi fare quanto segue usando un proc memorizzato o un linguaggio di programmazione se questo è qualcosa che devi fare su base regolare:
pseudocodice:
Scopri se la colonna esiste usando il seguente SQL:
SELEZIONA column_name
DA INFORMATION_SCHEMA
. COLUMNS
WHERE TABLE_SCHEMA
= [Nome database] AND TABLE_NAME
= [Nome tabella];
Se la query sopra restituisce un risultato, significa che esiste la colonna, altrimenti puoi andare avanti e creare la colonna.
column_name
non esiste. Ho riformulato la domanda per: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]'
Attualmente esiste attualmente per Maria DB 10.219
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
Bonus, funziona anche con MODIFICA
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
È possibile utilizzare questa soluzione, già menzionata in un altro post StackOverFlow: (Rif .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE per aggiungere una colonna se non esiste:
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;
Questo sotto ha funzionato per me:
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;