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:
- MySQL-referentiehandleiding:Hoofdstuk 19. INFORMATION_SCHEMA-tabellen
- MySQL-referentiehandleiding:De INFORMATION_SCHEMA TABLES-tabel
- MySQL-referentiehandleiding:De INFORMATION_SCHEMA COLUMNS-tabel
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:
- Maak een tijdelijke tabel, een exacte kopie van de bestaande tabel
- Vul de tijdelijke tabel met de gegevens uit de oude tabel
- Laat de oude tafel vallen
- Maak de nieuwe tabel met nieuw schema
- Vul de nieuwe tabel met de informatie uit de tijdelijke tabel
- 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:
- MySQL-referentiehandleiding:CREATE TABLE-syntaxis
- MySQL-referentiehandleiding:INSERT-syntaxis
- MySQL-referentiehandleiding:INSERT ... SELECT Syntaxis