Le type ENUM en SQL : Sécurisez une base de données MySQL

Accueil Sécurité Le type ENUM en SQL : Sécurisez une base de données MySQL

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 MySQLMariaDB 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 colonne statut.
  • 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 :

Formation web et informatique - Alban Guillier - Formateur

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

AvantagesInconvénients
Facile à mettre en œuvreDifficile à modifier une fois en production
Réduction des fautes de saisiePas toujours portable d’un SGBD à l’autre
Meilleure lisibilitéPeu adapté pour des listes longues ou évolutives
Optimisation de l’espace disqueMoins 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.

Enum en SQL et MySQL

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 :

Live on Twitch
  • 🔥 Vendredi 25 Avril 2025 >19h00

    HTML & SémantiqueStructure d'une page HTML