sql >> Databáze >  >> RDS >> Mysql

Změňte tabulku, pokud existuje, nebo vytvořte, pokud neexistuje

MySQL INFORMATION_SCHEMA databáze k záchraně:

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

Více informací:

AKTUALIZACE:

Další možností, možná jednodušší, je zrušit stávající tabulku a znovu ji vytvořit s novým schématem. K tomu potřebujete:

  1. Vytvořte dočasnou tabulku, přesnou kopii stávající tabulky
  2. Vyplňte dočasnou tabulku daty ze staré tabulky
  3. Zrušte starou tabulku
  4. Vytvořte novou tabulku s novým schématem
  5. Naplňte novou tabulku informacemi z dočasné tabulky
  6. Zrušte dočasnou tabulku.

Takže v kódu 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;

Vlastně poslední krok, "Drop dočasné tabulky.", můžete na chvíli přeskočit. Pro každý případ byste chtěli mít nějakou zálohu staré tabulky, "jen pro případ".

Více informací:



  1. Klauzule CHECK pro aktualizovatelná zobrazení

  2. Propojení IBM DB2 se softwarem IRI

  3. 2 způsoby, jak získat informace o oddílu pro tabulku v SQL Server (T-SQL)

  4. Chyba 1062 – Duplicitní záznam „127“ pro klíč „PRIMARY“ – nelze najít důvod