CodeGym /Cours /SQL SELF /Ajout et suppression de colonnes dans une table

Ajout et suppression de colonnes dans une table

SQL SELF
Niveau 18 , Leçon 0
Disponible

Imagine que tu conçois une base de données pour une université. Au début, la table des étudiants contient juste deux champs : ID et nom. Simple, les étudiants commencent à utiliser le système. Mais un mois plus tard, les profs débarquent et disent : "On peut ajouter l'âge aussi ?", puis un peu après : "Il nous faut aussi l'email". Et ensuite : "Allez, on enlève le champ middle_name, personne ne le remplit de toute façon !". C'est là que tes skills avec ALTER TABLE pour ajouter et supprimer des colonnes vont te servir.

Syntaxe pour ajouter une colonne

Donc, pour ajouter une nouvelle colonne à une table PostgreSQL existante, tu utilises la commande ALTER TABLE. Voilà la syntaxe :

ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
  • table_name — le nom de la table dans laquelle tu veux ajouter une nouvelle colonne.
  • column_name — le nom de la colonne que tu veux ajouter.
  • data_type — le type de données, genre VARCHAR, INTEGER ou DATE.
  • constraints (optionnel) — les contraintes que tu veux mettre sur cette colonne, genre NOT NULL, DEFAULT, etc.

Exemple : on ajoute une nouvelle colonne

Imaginons qu'on a une table students qui a été créée avant :

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

D'un coup, on te demande d'ajouter une colonne age pour stocker l'âge des étudiants. Voilà comment faire :

ALTER TABLE students
ADD COLUMN age INTEGER;

Maintenant, la structure de la table students ressemble à ça :

id name age
1 Eva NULL
2 Alex NULL

Si tu ajoutes de nouveaux enregistrements sans préciser l'âge, PostgreSQL va automatiquement mettre NULL, vu qu'on n'a pas mis de contraintes genre NOT NULL ou de valeur par défaut (DEFAULT).

Syntaxe pour supprimer une colonne

Supprimer une colonne d'une table, c'est aussi avec la commande ALTER TABLE. Voilà la syntaxe :

ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
  • table_name — le nom de la table d'où tu veux virer la colonne.
  • column_name — le nom de la colonne à supprimer.
  • RESTRICT — empêche la suppression si la colonne est référencée ailleurs (par défaut).
  • CASCADE — supprime la colonne et toutes ses dépendances.

Je te parlerai plus en détail de la suppression en cascade au niveau suivant :P

Exemple : on supprime une colonne inutile

Revenons à la table students. On a décidé que le champ age ne sert plus à rien. On le supprime :

ALTER TABLE students
DROP COLUMN age;

Maintenant, la structure de la table est à nouveau simplifiée :

id name
1 Eva
2 Alex

Exemples utiles

Ajouter une colonne avec des contraintes

Et si tu voulais quand même ajouter la colonne age, mais avec la contrainte NOT NULL et une valeur par défaut ? Ce code ferait l'affaire :

ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;

Maintenant, dans toutes les lignes existantes, la colonne age aura la valeur 18, et pour les nouveaux enregistrements, il faudra obligatoirement mettre une valeur pour ce champ, sauf si tu utilises la valeur par défaut.

Suppression d'une colonne avec dépendances

Si une colonne a des dépendances (genre elle est utilisée dans des vues ou des triggers), tu devras utiliser le modificateur CASCADE. Mais fais gaffe : ça peut impacter d'autres objets dans ta base. Par exemple :

ALTER TABLE students
DROP COLUMN email CASCADE;

Erreurs courantes et particularités

Erreur : ajout d'une colonne avec un mauvais type de données.
Imagine que tu ajoutes une colonne de type INTEGER, mais que tu essaies d'y stocker du texte. PostgreSQL va pas comprendre et va te sortir une erreur à l'insertion. Le type de données doit toujours coller au contenu.

Erreur : suppression d'une colonne sans tenir compte des dépendances.
Par exemple, si tu supprimes une colonne référencée par des index ou des clés étrangères, PostgreSQL peut te sortir une erreur si tu n'as pas mis le modificateur CASCADE.

Erreur : suppression d'une colonne avec dépendances. Par exemple, si tu supprimes une colonne référencée par des index ou des clés étrangères, PostgreSQL peut te sortir une erreur si tu n'as pas mis le modificateur CASCADE. Tu l'as ajouté et tu as supprimé des milliers de lignes qui pointaient vers ta colonne supprimée. Qui n'auraient pas dû être supprimées : (

Particularité : ordre d'exécution des modifs.
Parfois, ajouter des colonnes avec des contraintes demande de connaître l'ordre des opérations. Par exemple, si tu ajoutes une colonne avec NOT NULL, il faut d'abord la remplir avec des valeurs par défaut, sinon PostgreSQL va râler.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION