Modification d'une table

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 :

1
2
3
4
5
6
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 :

1
2
3
4
5
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 :

1
2
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, ça a forcément été inséré). Cela nous donne :

1
2
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 :

1
2
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.

1
2
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 :

1
2
ALTER TABLE nom_table 
CHANGE ancien_nom nouveau_nom description_colonne;

Par exemple, pour renommer la colonne nom en prenom, vous pouvez écrire

1
2
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 :

1
2
3
4
5
ALTER TABLE nom_table 
CHANGE ancien_nom nouveau_nom nouvelle_description;

ALTER TABLE nom_table 
MODIFY nom_colonne nouvelle_description;

Des exemples pour illustrer :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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)