sql >> Databasteknik >  >> RDS >> Mysql

Ändra tabell om det finns eller skapa om det inte finns

MySQL INFORMATION_SCHEMA databas till undsättning:

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

Mer information:

UPPDATERING:

Ett annat alternativ, möjligen lättare, är att släppa den befintliga tabellen och återskapa den igen med det nya schemat. För att göra detta behöver du:

  1. Skapa en tillfällig tabell, en exakt kopia av den befintliga tabellen
  2. Fyll i den temporära tabellen med data från den gamla tabellen
  3. Släpp den gamla tabellen
  4. Skapa den nya tabellen med nytt schema
  5. Fyll i den nya tabellen med informationen från den tillfälliga tabellen
  6. Släpp tillfällig tabell.

Så, i SQL-kod:

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;

Egentligen det sista steget, "Släpp tillfälligt bord.", kan du hoppa över ett tag. För säkerhets skull skulle du vilja ha någon form av backup av den gamla tabellen, "just-in-case".

Mer information:



  1. Databashörna:Nybörjarguide till Mysql-lagringsmotorer

  2. Jobbkö som SQL-tabell med flera konsumenter (PostgreSQL)

  3. mysql-serverportnummer

  4. MYSQL hur man låser upp tabell om jag använde kommandot LOCK table table_name WRITE;