MySQL: come creare una colonna se non esiste?


14

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?


Sono curioso ... Cosa c'è che non va nel lasciare che la modifica fallisca se la colonna esiste già?
Derek Downey,

In realtà devo fornire al mio client il file .sql che avrebbe tutte le domande relative alle modifiche alla struttura del DB. Non riesco a inviare loro l'intero database. Voglio solo inviare loro le modifiche db. ci sono molte più query in quel file sql. Se questa query sulla creazione di colonne fallisse, allora fallirebbe tutte le query. Ecco perché voglio usare if condition per creare una colonna.
zzzzz,

Se il database lo supporta, è possibile utilizzare un trigger. PRIMA DI INSERIRE.
cybernard

Risposte:


8

MySQL ALTER TABLEnon ha IF EXISTSspecifiche.

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.


In MySQL / MariaDB viene visualizzato un errore durante l'utilizzo della query, indicando che column_namenon 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]';
Jesus Alonso Abad,

2
Per una semplice risposta 0 o 1 su MySQL e (credo) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo,

14

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);

3
> "MYSQL 5.5.5"? Questo non è corretto, questa è solo una funzione di Maria DB.
Excalibur,

1
grazie per la correzione
Paroofkey,

6

È 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;

2

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;

Sono andato con questo, grazie.
Stuart McIntyre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.