Mysql
 sql >> Database >  >> RDS >> Mysql

Modifica la tabella se esiste o crea in caso contrario

MySQL INFORMATION_SCHEMA database in soccorso:

-- First check if the table exists
IF EXISTS(SELECT table_name 
            FROM INFORMATION_SCHEMA.TABLES
           WHERE table_schema = 'db_name'
             AND table_name LIKE 'wild')

-- If exists, retreive columns information from that table
THEN
   SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
     FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'tbl_name'
      AND table_schema = 'db_name';

   -- do some action, i.e. ALTER TABLE if some columns are missing 
   ALTER TABLE ...

-- Table does not exist, create a new table
ELSE
   CREATE TABLE ....

END IF;

Maggiori informazioni:

AGGIORNAMENTO:

Un'altra opzione, forse più semplice, consiste nell'eliminare la tabella esistente e ricrearla nuovamente con il nuovo schema. Per fare ciò, hai bisogno di:

  1. Crea una tabella temporanea, una copia esatta della tabella esistente
  2. Popolare la tabella temporanea con i dati della vecchia tabella
  3. Annulla la vecchia tabella
  4. Crea la nuova tabella con un nuovo schema
  5. Compila la nuova tabella con le informazioni della tabella temporanea
  6. Elimina tabella temporanea.

Quindi, nel codice SQL:

CREATE TABLE old_table_copy LIKE old_table;

INSERT INTO old_table_copy
SELECT * FROM old_table;

DROP TABLE old_table;

CREATE TABLE new_table (...new values...);

INSERT INTO new_table ([... column names from old table ...])
SELECT [...column names from old table ...] 
FROM old_table_copy;

DROP TABLE old_table_copy;

In realtà l'ultimo passaggio, "Rilascia tabella temporanea", potresti saltare per un po'. Per ogni evenienza, vorresti avere una sorta di backup della vecchia tabella, "per ogni evenienza".

Maggiori informazioni: