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 TABLEest 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).
Syntaxe de base
Section titled “Syntaxe de base”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.
Ajouter une colonne
Section titled “Ajouter une colonne”Syntaxe
Section titled “Syntaxe”L’ajout d’une colonne dans une table est relativement simple :
ALTER TABLE nom_table ADD nom_colonne type_donnees [contraintes];Exemple
Section titled “Exemple”Pour ajouter une colonne rue à une table utilisateur :
ALTER TABLE utilisateur ADD rue VARCHAR(255);Ajouter une colonne avec une contrainte
Section titled “Ajouter une colonne avec une contrainte”ALTER TABLE utilisateur ADD date_inscription DATE NOT NULL DEFAULT CURRENT_DATE;Remarque : L’ajout d’une colonne
NOT NULLsans 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).
Ajouter plusieurs colonnes
Section titled “Ajouter plusieurs colonnes”MySQL :
ALTER TABLE utilisateurADD rue VARCHAR(255),ADD code_postal VARCHAR(5),ADD ville VARCHAR(100);PostgreSQL :
ALTER TABLE utilisateurADD COLUMN rue VARCHAR(255),ADD COLUMN code_postal VARCHAR(5),ADD COLUMN ville VARCHAR(100);Supprimer une colonne
Section titled “Supprimer une colonne”Syntaxe
Section titled “Syntaxe”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;Exemple
Section titled “Exemple”ALTER TABLE utilisateur DROP COLUMN ancienne_colonne;Supprimer plusieurs colonnes
Section titled “Supprimer plusieurs colonnes”MySQL :
ALTER TABLE utilisateurDROP colonne1,DROP colonne2;PostgreSQL :
ALTER TABLE utilisateurDROP COLUMN colonne1,DROP COLUMN colonne2;Attention : La suppression d’une colonne est irréversible (sauf restauration). Les données qu’elle contenait sont perdues.
Modifier une colonne
Section titled “Modifier une colonne”Pour modifier une colonne, par exemple changer son type de données, il existe différentes syntaxes selon le SGBD.
MySQL / MariaDB
Section titled “MySQL / MariaDB”ALTER TABLE nom_table MODIFY nom_colonne nouveau_type [contraintes];Exemple :
-- Augmenter la taille d'une colonne VARCHARALTER TABLE utilisateur MODIFY nom VARCHAR(150);
-- Changer le type de donnéesALTER TABLE utilisateur MODIFY age SMALLINT;PostgreSQL
Section titled “PostgreSQL”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:
VARCHARversTEXT). Pour des conversions plus complexes, il faut utiliserUSING.
SQL Server
Section titled “SQL Server”ALTER TABLE nom_table ALTER COLUMN nom_colonne nouveau_type;Exemple :
ALTER TABLE utilisateur ALTER COLUMN nom VARCHAR(150);Renommer une colonne
Section titled “Renommer une colonne”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);PostgreSQL
Section titled “PostgreSQL”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;SQL Server
Section titled “SQL Server”EXEC sp_rename 'table.ancien_nom', 'nouveau_nom', 'COLUMN';Renommer une table
Section titled “Renommer une table”MySQL / PostgreSQL / SQL Server
Section titled “MySQL / PostgreSQL / SQL Server”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;Ajouter ou supprimer des contraintes
Section titled “Ajouter ou supprimer des contraintes”Ajouter une clé primaire
Section titled “Ajouter une clé primaire”ALTER TABLE utilisateur ADD PRIMARY KEY (id);Supprimer une clé primaire
Section titled “Supprimer une clé primaire”ALTER TABLE utilisateur DROP PRIMARY KEY;Ajouter une contrainte UNIQUE
Section titled “Ajouter une contrainte UNIQUE”ALTER TABLE utilisateur ADD UNIQUE (email);Supprimer une contrainte UNIQUE
Section titled “Supprimer une contrainte UNIQUE”MySQL :
ALTER TABLE utilisateur DROP INDEX email;PostgreSQL :
ALTER TABLE utilisateur DROP CONSTRAINT utilisateur_email_key;Ajouter une clé étrangère
Section titled “Ajouter une clé étrangère”ALTER TABLE commandeADD FOREIGN KEY (utilisateur_id) REFERENCES utilisateur(id);Supprimer une clé étrangère
Section titled “Supprimer une clé étrangère”MySQL :
ALTER TABLE commande DROP FOREIGN KEY fk_commande_utilisateur;PostgreSQL :
ALTER TABLE commande DROP CONSTRAINT commande_utilisateur_id_fkey;Ajouter une contrainte CHECK
Section titled “Ajouter une contrainte CHECK”ALTER TABLE personne ADD CHECK (age >= 0);Résumé des opérations par SGBD
Section titled “Résumé des opérations par SGBD”| 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 |
Exemple complet
Section titled “Exemple complet”Imaginons une table produit créée initialement avec les colonnes id, nom et prix.
-- Étape 1 : Créer la tableCREATE TABLE produit ( id INT PRIMARY KEY, nom VARCHAR(100), prix DECIMAL(10,2));
-- Étape 2 : Ajouter une colonne descriptionALTER 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 nomALTER TABLE produit MODIFY nom VARCHAR(200);
-- Étape 5 : Renommer la colonne prix en prix_htALTER 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èteALTER TABLE produit DROP description;Bonnes pratiques
Section titled “Bonnes pratiques”-
Toujours faire une sauvegarde avant de modifier une table en production.
-
Tester sur un environnement de développement avant de passer en production.
-
Ajouter des colonnes avec
NULLautorisé ou avec une valeur par défaut pour éviter de bloquer la modification sur de grandes tables. -
Éviter les modifications massives en production : pour les très grandes tables, les opérations peuvent prendre du temps et verrouiller la table.
-
Vérifier les dépendances (vues, procédures stockées, contraintes) avant de supprimer ou renommer une colonne.
-
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;- Planifier les maintenances : les opérations
ALTER TABLEpeuvent verrouiller une table. Planifiez-les pendant les heures creuses.
Erreurs courantes
Section titled “Erreurs courantes”| 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 |
Prochain chapitre
Section titled “Prochain chapitre”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