Le type ENUM en SQL est un outil puissant mais souvent méconnu, capable de simplifier la structure de vos bases de données tout en renforçant leur fiabilité.
Ce tutoriel vous explique en détail ce qu’est un ENUM en SQL, à quoi il sert, comment l’utiliser correctement, et dans quels cas il peut devenir votre meilleur allié.
Qu’est-ce que ENUM en SQL ?
Le mot ENUM est l’abréviation de “ENUMération”. Il s’agit d’un type de données disponible dans plusieurs systèmes de gestion de bases de données relationnelles (comme MySQL, MariaDB ou PostgreSQL dans une moindre mesure). ENUM permet de définir une liste prédéfinie de valeurs autorisées pour une colonne spécifique.
Définition simple
ENUM est un type de champ qui autorise uniquement une valeur parmi une liste définie à l’avance.
C’est comme une boîte contenant des étiquettes : chaque étiquette correspond à une valeur autorisée. L’utilisateur ne peut choisir qu’une seule étiquette parmi celles disponibles.
Pourquoi utiliser ENUM en SQL ?
Utiliser ENUM en SQL offre plusieurs avantages, notamment :
- ✅ Contrôle des valeurs saisies : vous limitez les erreurs de saisie.
- ✅ Lisibilité du code : le sens des données est plus clair.
- ✅ Meilleures performances que des types TEXT ou VARCHAR sur des valeurs limitées.
- ✅ Gain de place : les systèmes de gestion de base de données optimisent l’espace utilisé.
Syntaxe de base d’un champ ENUM
Voici la syntaxe classique pour créer une colonne ENUM :
CREATE TABLE utilisateurs (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100),
statut ENUM('actif', 'inactif', 'en attente')
);
Dans cet exemple :
- La table
utilisateurs
contient une colonnestatut
. - Cette colonne n’accepte que trois valeurs :
'actif'
,'inactif'
ou'en attente'
.
Toute tentative d’insertion d’une autre valeur provoquera une erreur.
Cas concrets d’utilisation de ENUM en SQL
Voyons maintenant des exemples concrets pour comprendre comment utiliser ENUM dans des projets réels.
Exemple 1 : Statut d’un utilisateur
Imaginons une application web où chaque utilisateur peut être :
- actif
- inactif
- suspendu
Le champ ENUM évite les fautes de frappe comme “actiff” ou “suspenndu”.
CREATE TABLE comptes (
id INT AUTO_INCREMENT PRIMARY KEY,
nom_utilisateur VARCHAR(50),
statut ENUM('actif', 'inactif', 'suspendu') NOT NULL
);
Exemple 2 : Type de livraison dans un e-commerce
Dans une boutique en ligne, vous pourriez proposer :
- Livraison standard
- Livraison express
- Retrait en magasin
CREATE TABLE commandes (
id INT PRIMARY KEY,
client_id INT,
mode_livraison ENUM('standard', 'express', 'retrait') DEFAULT 'standard'
);
Le champ mode_livraison
assure que seules les méthodes prévues soient utilisées.
Exemple 3 : Niveau d’un étudiant
Dans une base de données scolaire :
CREATE TABLE etudiants (
id INT PRIMARY KEY,
nom VARCHAR(100),
niveau ENUM('débutant', 'intermédiaire', 'avancé')
);
Cela facilite les filtres, les tris et les statistiques par niveau.
Manipulation d’un champ ENUM : INSERT, SELECT, UPDATE
Voici quelques requêtes pratiques pour insérer, mettre à jour ou lire un champ ENUM.
🔹 Insertion
INSERT INTO comptes (nom_utilisateur, statut) VALUES ('alban', 'actif');
🔹 Lecture
SELECT * FROM comptes WHERE statut = 'inactif';
🔹 Mise à jour
UPDATE comptes SET statut = 'suspendu' WHERE nom_utilisateur = 'alban';
Si vous tentez de modifier statut
avec une valeur non définie, la base de données refusera l’opération.
ENUM : Bonnes pratiques
L’utilisation du type ENUM en SQL doit se faire de manière réfléchie. Voici quelques bonnes pratiques à adopter :

Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?Définir les valeurs ENUM de manière claire
Choisissez des valeurs significatives et compréhensibles pour les humains.
Mauvais exemple :
statut ENUM('A', 'B', 'C')
Bon exemple :
statut ENUM('actif', 'inactif', 'suspendu')
Privilégier ENUM pour les listes courtes et fixes
ENUM est idéal pour des listes stables de 3 à 10 valeurs. Si les options évoluent régulièrement, préférez une table relationnelle.
Mauvais usage :
categorie_produit ENUM('informatique', 'mode', 'sport', 'jouets', 'automobile', 'livres', 'musique', 'jardinage', ...)
Ici, une table categories
serait plus adaptée.
✅ Toujours prévoir une valeur par défaut ou gérer le NULL
Cela évite les champs vides non prévus :
mode_livraison ENUM('standard', 'express', 'retrait') DEFAULT 'standard'
ENUM vs CHECK : quelle différence ?
Depuis la version 8.0 de MySQL, vous pouvez aussi utiliser la contrainte CHECK, qui permet de valider des valeurs.
Exemple avec CHECK :
CREATE TABLE produits (
id INT,
etat VARCHAR(20),
CHECK (etat IN ('neuf', 'occasion', 'reconditionné'))
);
Cependant :
- ENUM est plus lisible.
- ENUM permet un typage fort.
- ENUM est mieux supporté par les outils d’administration (PhpMyAdmin, Adminer, etc.)
Avantages et inconvénients du type ENUM
Avantages | Inconvénients |
---|---|
Facile à mettre en œuvre | Difficile à modifier une fois en production |
Réduction des fautes de saisie | Pas toujours portable d’un SGBD à l’autre |
Meilleure lisibilité | Peu adapté pour des listes longues ou évolutives |
Optimisation de l’espace disque | Moins souple qu’une relation classique avec une table |
Peut-on modifier un ENUM existant ?
Oui, mais cela demande de modifier la structure de la table, ce qui peut poser problème si la base est déjà en production.
Exemple : ajouter une nouvelle valeur
ALTER TABLE comptes MODIFY statut ENUM('actif', 'inactif', 'suspendu', 'supprimé');
⚠️ Attention : cette opération peut entraîner des erreurs ou des incohérences si vous oubliez une valeur déjà utilisée.
ENUM en SQL et interfaces utilisateurs
Si vous créez une interface (ex : formulaire web), le champ ENUM peut être lié à un menu déroulant (select), comme dans cet exemple HTML :
<select name="statut">
<option value="actif">Actif</option>
<option value="inactif">Inactif</option>
<option value="suspendu">Suspendu</option>
</select>
Cela évite aux utilisateurs de taper une valeur libre, et garantit la compatibilité avec la base de données.

Résumé : Quand utiliser ENUM en SQL ?
Utilisez le type ENUM lorsque :
- Vous avez une liste de choix fixes.
- Les valeurs ne changent presque jamais.
- Vous souhaitez améliorer la qualité des données.
- Vous voulez un champ facilement exploitable dans les interfaces.
Le type ENUM en SQL est un outil simple mais puissant pour structurer vos bases de données de manière propre et sécurisée. Il permet d’éviter les erreurs, de gagner en lisibilité et d’optimiser l’espace tout en renforçant la cohérence des données.
N’hésitez pas à l’utiliser dans vos projets dès que vous avez une liste de valeurs fixes. Cela vous évitera bien des soucis en développement comme en production.
Pour aller plus loin
Vous pouvez approfondir votre compréhension du SQL avec les tutoriels suivants :
- PhpMyAdmin : Importer une BDD
- Adminer : Tutoriel complet
- CDM, LDM, ERD et PDM pour MySQL
- Liste complète des requêtes SQL
- Clé et Index SQL / MySQL
- La requête JOIN en SQL
- Trigger et Stored procedure MySQL
- Le type BLOB en MySQL
- Exporter BDD au format CSV en PHP
- MySQL Workbench, l’indispensable
- 🔥 Vendredi 25 Avril 2025 >19h00
HTML & SémantiqueStructure d'une page HTML