MySQL INFORMATION_SCHEMA
base de données à la rescousse :
-- 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;
Plus d'informations :
- Manuel de référence MySQL :Chapitre 19. Tables INFORMATION_SCHEMA
- Manuel de référence MySQL :La table INFORMATION_SCHEMA TABLES
- Manuel de référence MySQL :La table INFORMATION_SCHEMA COLUMNS
MISE À JOUR :
Une autre option, peut-être plus simple, consiste à supprimer la table existante et à la recréer avec le nouveau schéma. Pour ce faire, vous avez besoin :
- Créer une table temporaire, une copie exacte de la table existante
- Remplir la table temporaire avec les données de l'ancienne table
- Laisser tomber l'ancienne table
- Créer la nouvelle table avec le nouveau schéma
- Remplir la nouvelle table avec les informations de la table temporaire
- Supprimer la table temporaire.
Donc, en code 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;
En fait, la dernière étape, "Supprimer la table temporaire.", vous pouvez sauter un moment. Juste au cas où, vous voudriez avoir une sorte de sauvegarde de l'ancienne table, "juste au cas où".
Plus d'informations :
- Manuel de référence MySQL :Syntaxe CREATE TABLE
- Manuel de référence MySQL :Syntaxe INSERT
- Manuel de référence MySQL :INSERT ... SELECT Syntaxe