Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Alterar tabela se existir ou criar se não existir


MySQL INFORMATION_SCHEMA banco de dados para o resgate:
-- 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;

Mais Informações:

ATUALIZAÇÃO:

Outra opção, possivelmente mais fácil, é descartar a tabela existente e recriá-la novamente com o novo esquema. Para fazer isso, você precisa:
  1. Criar tabela temporária, uma cópia exata da tabela existente
  2. Preencha a tabela temporária com os dados da tabela antiga
  3. Retire a tabela antiga
  4. Crie a nova tabela com o novo esquema
  5. Preencha a nova tabela com as informações da tabela temporária
  6. Retire a tabela temporária.

Então, no código 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;

Na verdade, a última etapa, "Soltar tabela temporária.", você pode pular por um tempo. Apenas no caso, você gostaria de ter algum tipo de backup da tabela antiga, "just-in-case".

Mais Informações: