La création et la suppression de tables étant acquises, parlons maintenant des requêtes permettant de modifier une table.
Plus précisément, ce chapitre portera sur la modification des colonnes d'une table (ajout d'une colonne, modification, suppression de colonnes).
Il est possible de modifier d'autres éléments (des contraintes ou des index, par exemple), mais cela nécessite des notions que vous ne possédez pas encore, aussi n'en parlerai-je pas ici.
Notez qu'idéalement, il faut penser à l'avance à la structure de votre base et créer toutes vos tables directement et proprement, de manière à ne les modifier qu'exceptionnellement.
Syntaxe de la requête
Lorsque l'on modifie une table, on peut vouloir lui ajouter, retirer ou modifier quelque chose. Dans les trois cas, c'est la commande ALTER TABLE
qui sera utilisée, une variante existant pour chacune des opérations :
ALTER TABLE nom_table ADD ... -- permet d'ajouter quelque chose (une colonne par exemple)
ALTER TABLE nom_table DROP ... -- permet de retirer quelque chose
ALTER TABLE nom_table CHANGE ...
ALTER TABLE nom_table MODIFY ... -- permettent de modifier une colonne
Créons une table pour faire joujou
Dans la seconde partie de ce tutoriel, nous devrons faire quelques modifications sur notre table Animal, mais en attendant, je vous propose d'utiliser la table suivante, si vous avez envie de tester les différentes possibilités d'ALTER TABLE
:
CREATE TABLE Test_tuto (
id INT NOT NULL,
nom VARCHAR(10) NOT NULL,
PRIMARY KEY(id)
);
Ajout et suppression d'une colonne
Ajout
On utilise la syntaxe suivante :
ALTER TABLE nom_table
ADD [COLUMN] nom_colonne description_colonne;
Le [COLUMN]
est facultatif, donc, si à la suite de ADD
, vous ne précisez pas ce que vous voulez ajouter, MySQL considérera qu'il s'agit d'une colonne.description_colonne
correspond à la même chose que lorsque l'on crée une table. Il contient le type de donnée et éventuellement NULL
ou NOT NULL
, etc.
Ajoutons une colonne date_insertion à notre table de test. Il s'agit d'une date, donc une colonne de type DATE
convient parfaitement. Disons que cette colonne ne peut pas être NULL
(si c'est dans la table, cela a forcément été inséré). Cela nous donne :
ALTER TABLE Test_tuto
ADD COLUMN date_insertion DATE NOT NULL;
Un petit DESCRIBE Test_tuto;
vous permettra de vérifier les changements apportés.
Suppression
La syntaxe de ALTER TABLE ... DROP ...
est très simple :
ALTER TABLE nom_table
DROP [COLUMN] nom_colonne;
Comme pour les ajouts, le mot COLUMN
est facultatif. Par défaut, MySQL considérera que vous parlez d'une colonne.
Exemple : nous allons supprimer la colonne date_insertion, que nous remercions pour son passage éclair dans le cours.
ALTER TABLE Test_tuto
DROP COLUMN date_insertion; -- Suppression de la colonne date_insertion
Modification de colonne
Changement du nom de la colonne
Vous pouvez utiliser la commande suivante pour changer le nom d'une colonne :
ALTER TABLE nom_table
CHANGE ancien_nom nouveau_nom description_colonne;
Par exemple, pour renommer la colonne nom en prenom, vous pouvez écrire :
ALTER TABLE Test_tuto
CHANGE nom prenom VARCHAR(10) NOT NULL;
Attention, la description de la colonne doit être complète, sinon elle sera également modifiée. Si vous ne précisez pas NOT NULL
dans la commande précédente, prenom pourra contenir NULL
, alors que, du temps où elle s'appelait nom, cela lui était interdit.
Changement du type de données
Les mots-clés CHANGE
et MODIFY
peuvent être utilisés pour changer le type de donnée de la colonne, mais aussi changer la valeur par défaut ou ajouter/supprimer une propriété AUTO_INCREMENT
. Si vous utilisez CHANGE
, vous pouvez, comme on vient de le voir, renommer la colonne en même temps. Si vous ne désirez pas la renommer, il suffit d'indiquer deux fois le même nom.
Voici les syntaxes possibles :
ALTER TABLE nom_table
CHANGE ancien_nom nouveau_nom nouvelle_description;
ALTER TABLE nom_table
MODIFY nom_colonne nouvelle_description;
Des exemples pour illustrer :
ALTER TABLE Test_tuto
CHANGE prenom nom VARCHAR(30) NOT NULL; -- Changement du type + changement du nom
ALTER TABLE Test_tuto
CHANGE id id BIGINT NOT NULL; -- Changement du type sans renommer
ALTER TABLE Test_tuto
MODIFY id BIGINT NOT NULL AUTO_INCREMENT; -- Ajout de l'auto-incrémentation
ALTER TABLE Test_tuto
MODIFY nom VARCHAR(30) NOT NULL DEFAULT 'Blabla'; -- Changement de la description (même type mais ajout d'une valeur par défaut)
Il existe pas mal d'autres possibilités et combinaisons pour la commande ALTER TABLE
, mais en faire la liste complète ne rentre pas dans le cadre de ce cours. Si vous ne trouvez pas votre bonheur ici, je vous conseille de le chercher dans la documentation officielle.
En résumé
La commande
ALTER TABLE
permet de modifier une table.Lorsque l'on ajoute ou modifie une colonne, il faut toujours préciser sa (nouvelle) description complète (type, valeur par défaut, auto-incrément éventuel).