Skip to content

ALTER TABLE – Modifier une table

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes


La commande ALTER TABLE en SQL permet de modifier une table existante. Il est ainsi possible d’ajouter une colonne, d’en supprimer une ou de modifier une colonne existante, par exemple pour changer le type de données ou renommer une colonne.

Bon à savoir : ALTER TABLE est une commande DDL (Data Definition Language). Elle modifie la structure de la table sans affecter les données existantes (sauf dans certains cas particuliers comme le changement de type de données).


D’une manière générale, la commande s’utilise de la manière suivante :

ALTER TABLE nom_table instruction;

Le mot-clé instruction ici sert à désigner une commande supplémentaire, qui sera détaillée ci-dessous selon l’action que l’on souhaite effectuer : ajouter, supprimer, modifier ou renommer une colonne.


L’ajout d’une colonne dans une table est relativement simple :

ALTER TABLE nom_table ADD nom_colonne type_donnees [contraintes];

Pour ajouter une colonne rue à une table utilisateur :

ALTER TABLE utilisateur ADD rue VARCHAR(255);
ALTER TABLE utilisateur ADD date_inscription DATE NOT NULL DEFAULT CURRENT_DATE;

Remarque : L’ajout d’une colonne NOT NULL sans valeur par défaut n’est possible que si la table est vide (sinon, le SGBD ne sait pas quelle valeur mettre pour les lignes existantes).

MySQL :

ALTER TABLE utilisateur
ADD rue VARCHAR(255),
ADD code_postal VARCHAR(5),
ADD ville VARCHAR(100);

PostgreSQL :

ALTER TABLE utilisateur
ADD COLUMN rue VARCHAR(255),
ADD COLUMN code_postal VARCHAR(5),
ADD COLUMN ville VARCHAR(100);

Il y a 2 manières totalement équivalentes pour supprimer une colonne :

ALTER TABLE nom_table DROP nom_colonne;

Ou (le résultat sera le même) :

ALTER TABLE nom_table DROP COLUMN nom_colonne;
ALTER TABLE utilisateur DROP COLUMN ancienne_colonne;

MySQL :

ALTER TABLE utilisateur
DROP colonne1,
DROP colonne2;

PostgreSQL :

ALTER TABLE utilisateur
DROP COLUMN colonne1,
DROP COLUMN colonne2;

Attention : La suppression d’une colonne est irréversible (sauf restauration). Les données qu’elle contenait sont perdues.


Pour modifier une colonne, par exemple changer son type de données, il existe différentes syntaxes selon le SGBD.

ALTER TABLE nom_table MODIFY nom_colonne nouveau_type [contraintes];

Exemple :

-- Augmenter la taille d'une colonne VARCHAR
ALTER TABLE utilisateur MODIFY nom VARCHAR(150);
-- Changer le type de données
ALTER TABLE utilisateur MODIFY age SMALLINT;
ALTER TABLE nom_table ALTER COLUMN nom_colonne TYPE nouveau_type;

Exemple :

ALTER TABLE utilisateur ALTER COLUMN nom TYPE VARCHAR(150);

Remarque : Pour changer le type d’une colonne en PostgreSQL, le SGBD doit pouvoir convertir automatiquement les données existantes (ex: VARCHAR vers TEXT). Pour des conversions plus complexes, il faut utiliser USING.

ALTER TABLE nom_table ALTER COLUMN nom_colonne nouveau_type;

Exemple :

ALTER TABLE utilisateur ALTER COLUMN nom VARCHAR(150);

Pour renommer une colonne, il convient d’indiquer l’ancien nom de la colonne et le nouveau nom.

Pour MySQL, il faut également indiquer le type de la colonne.

ALTER TABLE nom_table CHANGE ancien_nom nouveau_nom type_donnees;

Exemple :

ALTER TABLE utilisateur CHANGE nom nom_utilisateur VARCHAR(100);

Pour PostgreSQL, la syntaxe est plus simple (le type n’est pas demandé) :

ALTER TABLE nom_table RENAME COLUMN ancien_nom TO nouveau_nom;

Exemple :

ALTER TABLE utilisateur RENAME COLUMN nom TO nom_utilisateur;
EXEC sp_rename 'table.ancien_nom', 'nouveau_nom', 'COLUMN';

ALTER TABLE ancien_nom RENAME TO nouveau_nom;

PostgreSQL :

ALTER TABLE ancien_nom RENAME TO nouveau_nom;

MySQL :

RENAME TABLE ancien_nom TO nouveau_nom;

ALTER TABLE utilisateur ADD PRIMARY KEY (id);
ALTER TABLE utilisateur DROP PRIMARY KEY;
ALTER TABLE utilisateur ADD UNIQUE (email);

MySQL :

ALTER TABLE utilisateur DROP INDEX email;

PostgreSQL :

ALTER TABLE utilisateur DROP CONSTRAINT utilisateur_email_key;
ALTER TABLE commande
ADD FOREIGN KEY (utilisateur_id) REFERENCES utilisateur(id);

MySQL :

ALTER TABLE commande DROP FOREIGN KEY fk_commande_utilisateur;

PostgreSQL :

ALTER TABLE commande DROP CONSTRAINT commande_utilisateur_id_fkey;
ALTER TABLE personne ADD CHECK (age >= 0);

Opération MySQL / MariaDB PostgreSQL SQL Server
Ajouter colonne ADD colonne type ADD COLUMN colonne type ADD colonne type
Supprimer colonne DROP colonne DROP COLUMN colonne DROP COLUMN colonne
Modifier type MODIFY colonne type ALTER COLUMN colonne TYPE type ALTER COLUMN colonne type
Renommer colonne CHANGE ancien nouveau type RENAME COLUMN ancien TO nouveau sp_rename
Renommer table RENAME TO nouveau RENAME TO nouveau sp_rename
Ajouter contrainte ADD CONSTRAINT ... ADD CONSTRAINT ... ADD CONSTRAINT ...
Supprimer contrainte DROP CONSTRAINT / DROP INDEX DROP CONSTRAINT DROP CONSTRAINT

Imaginons une table produit créée initialement avec les colonnes id, nom et prix.

-- Étape 1 : Créer la table
CREATE TABLE produit (
id INT PRIMARY KEY,
nom VARCHAR(100),
prix DECIMAL(10,2)
);
-- Étape 2 : Ajouter une colonne description
ALTER TABLE produit ADD description TEXT;
-- Étape 3 : Ajouter une colonne categorie_id (clé étrangère)
ALTER TABLE produit ADD categorie_id INT;
ALTER TABLE produit ADD FOREIGN KEY (categorie_id) REFERENCES categorie(id);
-- Étape 4 : Augmenter la taille de la colonne nom
ALTER TABLE produit MODIFY nom VARCHAR(200);
-- Étape 5 : Renommer la colonne prix en prix_ht
ALTER TABLE produit CHANGE prix prix_ht DECIMAL(10,2);
-- Étape 6 : Ajouter une colonne prix_ttc (calculée)
ALTER TABLE produit ADD prix_ttc DECIMAL(10,2);
UPDATE produit SET prix_ttc = prix_ht * 1.20;
-- Étape 7 : Supprimer une colonne obsolète
ALTER TABLE produit DROP description;

  1. Toujours faire une sauvegarde avant de modifier une table en production.

  2. Tester sur un environnement de développement avant de passer en production.

  3. Ajouter des colonnes avec NULL autorisé ou avec une valeur par défaut pour éviter de bloquer la modification sur de grandes tables.

  4. Éviter les modifications massives en production : pour les très grandes tables, les opérations peuvent prendre du temps et verrouiller la table.

  5. Vérifier les dépendances (vues, procédures stockées, contraintes) avant de supprimer ou renommer une colonne.

  6. Utiliser des transactions lorsque c’est possible (comme dans PostgreSQL) :

BEGIN;
ALTER TABLE utilisateur ADD COLUMN nouveau_champ VARCHAR(50);
-- Vérifier...
ROLLBACK; -- ou COMMIT;
  1. Planifier les maintenances : les opérations ALTER TABLE peuvent verrouiller une table. Planifiez-les pendant les heures creuses.

Erreur Cause Solution
Duplicate column name Colonne déjà existante Vérifier les colonnes existantes
Cannot drop column Colonne référencée par une clé étrangère Supprimer d’abord la contrainte
Invalid type Type de données incompatible Vérifier la compatibilité des types
Table is locked Table verrouillée par une autre session Attendre la fin de l’opération en cours
Data too long for column Taille insuffisante pour les données Augmenter la taille du champ

Vous savez désormais comment modifier la structure d’une table avec ALTER TABLE. Mais que faire si vous souhaitez supprimer définitivement une table ?

👉 Chapitre 30 : DROP TABLE – Supprimer une table


Bonne continuation !
Junior TSAFACK – 08/08/2026