Lorsque vous travaillez avec des bases de données, l’un des enjeux les plus importants est l’intégrité des données. C’est là qu’intervient une clause souvent méconnue mais extrêmement utile : la contrainte CHECK en SQL.
Elle permet de garantir que les données insérées dans une table respectent des conditions précises.
Dans ce tutoriel, nous allons découvrir ce qu’est la contrainte CHECK en SQL, pourquoi elle est essentielle, comment l’utiliser dans vos projets, et surtout, nous vous proposerons des exemples concrets pour bien comprendre.
- Qu’est-ce que la contrainte CHECK en SQL ?
- Pourquoi utiliser CHECK en SQL ?
- Exemple simple de contrainte CHECK
- Exemple plus complet : commande d’un site e-commerce
- CHECK sur plusieurs colonnes
- Attention à la compatibilité SQL
- Cas d’usage de la contrainte CHECK en SQL / MySQL
- CHECK vs autres contraintes
- Ajouter ou supprimer une contrainte CHECK après la création d’une table
- Vérification des contraintes dans PhpMyAdmin ou MySQL Workbench
- CHECK et performances
Qu’est-ce que la contrainte CHECK en SQL ?
La clause CHECK
est une contrainte (ou constraint en anglais) que l’on peut appliquer sur une colonne ou sur une table entière. Elle sert à restreindre les valeurs qu’un champ peut accepter selon une condition définie par le développeur.
Par exemple, si vous avez une table contenant les âges de vos utilisateurs, vous pouvez décider que cet âge doit toujours être supérieur à 0. Cela évitera les erreurs absurdes comme un âge négatif.
Syntaxe générale :
CREATE TABLE nom_table (
nom_colonne TYPE DONNÉE CHECK (condition)
);
Pourquoi utiliser CHECK en SQL ?
Voici les principaux avantages de la contrainte CHECK :
- ✅ Prévention des erreurs de saisie
- ✅ Respect des règles métier
- ✅ Sécurité renforcée
- ✅ Gain de temps pour le contrôle des données
- ✅ Automatisation de la validation côté base de données
Elle fonctionne directement au niveau du serveur SQL, ce qui signifie que toutes les applications qui insèrent ou modifient des données dans cette base devront respecter ces règles, même si elles ne sont pas codées dans le programme.
Exemple simple de contrainte CHECK
Créons une table d’utilisateurs avec une contrainte sur l’âge :
CREATE TABLE utilisateurs (
id INT PRIMARY KEY,
nom VARCHAR(100),
age INT CHECK (age >= 18)
);
Ici, la colonne age
ne peut contenir que des valeurs supérieures ou égales à 18. Si quelqu’un tente d’insérer une valeur comme age = 15
, une erreur sera levée et l’insertion sera refusée.
Exemple plus complet : commande d’un site e-commerce
Imaginons une table pour gérer les commandes de votre boutique en ligne :
CREATE TABLE commandes (
id INT PRIMARY KEY,
montant DECIMAL(10,2),
statut VARCHAR(50),
CHECK (montant >= 0),
CHECK (statut IN ('en attente', 'expédiée', 'livrée', 'annulée'))
);
Explication :
- Le
montant
ne peut jamais être négatif. - Le
statut
doit obligatoirement faire partie d’une liste de statuts définis.
Cela évite par exemple que l’on se retrouve avec un statut erroné comme « en cours de validation » ou « en expédition », qui ne sont pas gérés dans l’application.
CHECK sur plusieurs colonnes
La clause CHECK peut également porter sur plusieurs colonnes à la fois. C’est très utile pour faire respecter des relations logiques.
Exemple : une table de réductions valables à partir d’un certain montant :
CREATE TABLE reductions (
id INT PRIMARY KEY,
seuil DECIMAL(5,2),
reduction DECIMAL(5,2),
CHECK (reduction <= seuil)
);
Ici, on impose que le montant de la réduction ne dépasse jamais le seuil à atteindre. Cela permet d’éviter des incohérences comme une réduction de 30€ pour un seuil de 10€.
⚠️ Attention à la compatibilité SQL
Toutes les bases de données SQL ne gèrent pas de la même manière les contraintes CHECK. Voici un aperçu :
Système de gestion | Prise en charge de CHECK |
---|---|
MySQL | ✅ (à partir de la version 8.0.16) |
PostgreSQL | ✅ |
SQL Server | ✅ |
SQLite | ✅ |
Oracle | ✅ |
Important : Si vous utilisez une version de MySQL inférieure à 8.0.16, les contraintes CHECK
sont ignorées silencieusement. Pensez à mettre à jour votre système !
Cas d’usage de la contrainte CHECK en SQL / MySQL
1. Formulaires d’inscription
Vous créez un formulaire d’inscription pour votre plateforme d’e-learning :
CREATE TABLE inscriptions (
id INT PRIMARY KEY,
email VARCHAR(100),
mot_de_passe VARCHAR(100),
niveau_etude VARCHAR(30) CHECK (niveau_etude IN ('collège', 'lycée', 'bac+2', 'bac+5', 'autre'))
);
Ici, le champ niveau_etude
est contraint pour n’accepter que des valeurs prédéfinies. Cela permet de créer des filtres efficaces dans l’application sans avoir à nettoyer les données manuellement.
2. Gestion des stocks
Pour une table de produits :

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 ?CREATE TABLE produits (
id INT PRIMARY KEY,
nom VARCHAR(100),
stock INT CHECK (stock >= 0),
prix DECIMAL(6,2) CHECK (prix > 0)
);
Impossible d’avoir un stock négatif ou un prix à zéro : c’est la base pour une bonne gestion d’un inventaire.
3. Application de réservation
CREATE TABLE reservations (
id INT PRIMARY KEY,
date_debut DATE,
date_fin DATE,
CHECK (date_debut <= date_fin)
);
Cela évite les erreurs de logique comme une réservation qui se terminerait avant de commencer. La base de données agit ici comme une « double vérification ».
CHECK vs autres contraintes
Il existe d’autres types de contraintes SQL :
Contrainte | Rôle |
---|---|
NOT NULL | Interdit les valeurs nulles |
UNIQUE | Empêche les doublons |
PRIMARY KEY | Identifiant unique de chaque ligne |
FOREIGN KEY | Lien entre deux tables |
CHECK | Contrôle personnalisé selon une condition |
La contrainte CHECK est la plus souple pour vos propres règles métier. Elle permet de personnaliser à volonté les vérifications.
Ajouter ou supprimer une contrainte CHECK après la création d’une table
Si votre table existe déjà, vous pouvez ajouter une contrainte CHECK avec cette commande :
ALTER TABLE produits
ADD CONSTRAINT check_prix_pos CHECK (prix > 0);
Et pour la supprimer :
ALTER TABLE produits
DROP CONSTRAINT check_prix_pos;
(Note : la syntaxe exacte peut varier selon le SGBD utilisé.)
Vérification des contraintes dans PhpMyAdmin ou MySQL Workbench
Si vous travaillez avec des outils comme PhpMyAdmin ou MySQL Workbench (Site officiel), les contraintes CHECK peuvent parfois ne pas s’afficher directement dans l’interface (surtout sur les anciennes versions de MySQL).
Dans ce cas, utilisez la commande :
SHOW CREATE TABLE nom_table;
Cela vous montrera toutes les contraintes, y compris les CHECK définies dans le schéma de votre table.
CHECK et performances
Contrairement à ce que l’on pourrait croire, les contraintes CHECK n’impactent pas fortement les performances. Elles sont très rapides car exécutées directement dans le moteur SQL. Elles permettent même d’éviter des traitements supplémentaires dans votre code (PHP, JavaScript, etc.).
Résumé : Ce qu’il faut retenir
- La contrainte CHECK en SQL permet de valider les données à l’entrée selon vos propres règles.
- Elle s’utilise pour des colonnes uniques ou pour plusieurs colonnes combinées.
- Elle renforce la sécurité, la cohérence et l’automatisation dans vos bases de données.
- Elle est prise en charge par la plupart des systèmes, sauf certaines versions anciennes de MySQL.
- Elle peut s’ajouter à tout moment avec une commande
ALTER TABLE
.
Tableau comparatif : CHECK
vs ENUM
en SQL
Critère | CHECK | ENUM |
---|---|---|
Définition | Contrainte qui impose une condition logique sur les valeurs | Type de données spécifique qui limite les valeurs à une liste prédéfinie |
Type de fonctionnalité | Contrainte (restriction) | Type de données (spécifique à certaines bases de données comme MySQL) |
Syntaxe simple | CHECK (valeur > 0) ou CHECK (statut IN ('actif','inactif')) | statut ENUM('actif','inactif') |
Support multi-SGBD | Large compatibilité (PostgreSQL, SQL Server, Oracle, SQLite, MySQL ≥ 8) | Limité : principalement MySQL, non standard en PostgreSQL ou SQLite |
Flexibilité | Très flexible (opérations mathématiques, logique entre colonnes) | Moins flexible, uniquement une liste figée de valeurs |
Lisibilité | Plus explicite pour les conditions complexes | Plus compact pour des valeurs fixes et simples |
Modification des valeurs | Facile à modifier avec ALTER TABLE et DROP CONSTRAINT | Modification plus contraignante (nécessite recréation du champ dans MySQL) |
Portabilité | ✔️ Compatible avec SQL standard | ❌ Peu portable : ENUM est une extension MySQL |
Performance | Légèrement plus lente que ENUM (validation à chaque insertion) | Très rapide (stocké comme index interne en MySQL) |
Cas d’usage idéal | Règles métiers complexes (âge > 18, date_debut < date_fin, etc.) | Liste fermée de choix simples (sexe, statut, type, catégorie…) |
Validation croisée | ✔️ Possible entre plusieurs colonnes | ❌ Impossible (ne concerne qu’un champ) |
Vous pouvez également consultez notre tutoriel : Tout savoir sur le type ENUM.
Exemple avec CHECK
:
CREATE TABLE utilisateurs (
id INT,
age INT CHECK (age >= 18)
);
Exemple avec ENUM
(MySQL uniquement) :
CREATE TABLE utilisateurs (
id INT,
statut ENUM('actif', 'inactif', 'banni')
);
- Utilisez
CHECK
si vous avez besoin de conditions logiques ou de comparaisons complexes. - Utilisez
ENUM
si vous avez besoin d’un champ à valeurs fixes limitées, uniquement avec MySQL.
Si vous développez une application que vous souhaitez facilement transférer entre plusieurs bases de données, privilégiez CHECK
car il est plus universel.
Souhaitez-vous intégrer ce tableau directement dans votre article sur le blog Crea-Troyes ? Je peux aussi le convertir en HTML si vous le souhaitez.

Utiliser la contrainte CHECK en SQL, c’est anticiper les erreurs et garantir la qualité de vos données. Dans un monde où la donnée est au cœur des systèmes, cette clause est un outil simple mais puissant que tout développeur ou administrateur de base devrait connaître.
Si vous débutez avec SQL, n’hésitez pas à expérimenter dans un environnement local ou avec des outils comme Adminer, MySQL Workbench ou PhpMyAdmin. Testez différentes contraintes, provoquez volontairement des erreurs pour mieux comprendre leur effet. C’est en pratiquant que vous assimilerez vraiment leur utilité.
Allez plus loin avec SQL / MySQL :
- PhpMyAdmin : Importer une BDD
- Shéma relationnel : CDM, LDM, ERD et PDM pour MySQL
- Liste complète des requêtes SQL
- Clé et Index SQL / MySQL
- Le type ENUM en SQL
- La requête JOIN en SQL
- Trigger et Stored procedure MySQL
- Le type BLOB en MySQL
- Exporter BDD au format CSV en PHP
- 🔥 Vendredi 25 Avril 2025 >19h00
HTML & SémantiqueStructure d'une page HTML