MySQL INFORMATION_SCHEMA
database til undsætning:
-- 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;
Flere oplysninger:
- MySQL Reference Manual:Kapitel 19. INFORMATION_SCHEMA-tabeller
- MySQL Reference Manual:INFORMATION_SCHEMA TABLES-tabellen
- MySQL Reference Manual:INFORMATION_SCHEMA COLUMNS-tabellen
OPDATERING:
En anden mulighed, muligvis lettere, er at droppe den eksisterende tabel og genskabe den igen med det nye skema. For at gøre dette skal du bruge:
- Opret en midlertidig tabel, en nøjagtig kopi af den eksisterende tabel
- Fyld den midlertidige tabel med data fra den gamle tabel
- Slip den gamle tabel
- Opret den nye tabel med nyt skema
- Fyld den nye tabel med oplysningerne fra den midlertidige tabel
- Slet midlertidig tabel.
Så i SQL-kode:
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;
Faktisk kunne du springe det sidste trin, "Drop midlertidig tabel." over et stykke tid. For en sikkerheds skyld vil du gerne have en slags backup af den gamle tabel, "just-in-case".
Flere oplysninger:
- MySQL Reference Manual:OPRET TABEL-syntaks
- MySQL Reference Manual:INDSÆT syntaks
- MySQL Reference Manual:INSERT ... SELECT Syntaks