sql >> Database >  >> RDS >> Mysql

Wijzig de tabel als deze bestaat of maak een als deze niet bestaat

MySQL INFORMATION_SCHEMA database te hulp:

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

Meer informatie:

UPDATE:

Een andere optie, mogelijk gemakkelijker, is om de bestaande tabel te verwijderen en opnieuw te maken met het nieuwe schema. Om dit te doen, heb je nodig:

  1. Maak een tijdelijke tabel, een exacte kopie van de bestaande tabel
  2. Vul de tijdelijke tabel met de gegevens uit de oude tabel
  3. Laat de oude tafel vallen
  4. Maak de nieuwe tabel met nieuw schema
  5. Vul de nieuwe tabel met de informatie uit de tijdelijke tabel
  6. Laat tijdelijke tafel vallen.

Dus in SQL-code:

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;

Eigenlijk zou je de laatste stap, "Tijdelijke tafel laten vallen", een tijdje kunnen overslaan. Voor het geval dat u een soort back-up van de oude tabel wilt hebben, "voor het geval dat".

Meer informatie:



  1. MySQL-tekenreeks Laatste index van

  2. Hoe maak je een snelkoppeling voor SSMS en maak je automatisch verbinding met de standaard SQL-server - SQ:Server / TSQL-zelfstudie, deel 4

  3. JDBC-url voor MySQL-configuratie om utf8-tekencodering te gebruiken

  4. lopende balans berekenen in oracle-query