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í:
- Referenční příručka MySQL:Kapitola 19. Tabulky INFORMATION_SCHEMA
- Referenční příručka MySQL:Tabulka INFORMATION_SCHEMA TABLES
- Referenční příručka MySQL:Tabulka SLOUPCE INFORMAČNÍHO SCHÉMATU
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:
- Vytvořte dočasnou tabulku, přesnou kopii stávající tabulky
- Vyplňte dočasnou tabulku daty ze staré tabulky
- Zrušte starou tabulku
- Vytvořte novou tabulku s novým schématem
- Naplňte novou tabulku informacemi z dočasné tabulky
- 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í:
- Referenční příručka MySQL:CREATE TABLE Syntaxe
- Referenční příručka MySQL:INSERT Syntaxe
- Referenční příručka MySQL:INSERT ... SELECT syntaxe