MySQL INFORMATION_SCHEMA
database in soccorso:
-- 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;
Maggiori informazioni:
- Manuale di riferimento di MySQL:Capitolo 19. Tabelle INFORMATION_SCHEMA
- Manuale di riferimento di MySQL:La tabella INFORMATION_SCHEMA TABLES
- Manuale di riferimento di MySQL:La tabella INFORMATION_SCHEMA COLUMNS
AGGIORNAMENTO:
Un'altra opzione, forse più semplice, consiste nell'eliminare la tabella esistente e ricrearla nuovamente con il nuovo schema. Per fare ciò, hai bisogno di:
- Crea una tabella temporanea, una copia esatta della tabella esistente
- Popolare la tabella temporanea con i dati della vecchia tabella
- Annulla la vecchia tabella
- Crea la nuova tabella con un nuovo schema
- Compila la nuova tabella con le informazioni della tabella temporanea
- Elimina tabella temporanea.
Quindi, nel codice 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;
In realtà l'ultimo passaggio, "Rilascia tabella temporanea", potresti saltare per un po'. Per ogni evenienza, vorresti avere una sorta di backup della vecchia tabella, "per ogni evenienza".
Maggiori informazioni:
- Manuale di riferimento di MySQL:Sintassi CREATE TABLE
- Manuale di riferimento di MySQL:INSERT Syntax
- Manuale di riferimento di MySQL:INSERT ... SELECT Sintassi