Les contraintes en SQL
Les contraintes sont les règles appliquées aux colonnes de données d'une table. Elles sont utilisées pour limiter le type de données pouvant aller dans une table. Cela garantit l'exactitude et la fiabilité des données de la base de données.
Les contraintes peuvent être au niveau de la colonne ou de la table :
- Niveau colonne : appliquées à une seule colonne
- Niveau table : appliquées à l'ensemble de la table
Les contraintes les plus courantes
- NOT NULL
- DEFAULT
- UNIQUE
- CHECK
- PRIMARY KEY
- FOREIGN KEY
- INDEX
1. Contrainte NOT NULL
Par défaut, une colonne peut contenir des valeurs NULL. Si vous ne souhaitez pas qu'une colonne ait une valeur NULL, vous devez définir une telle contrainte sur cette colonne en spécifiant que NULL n'est plus autorisé pour cette colonne.
NULL n'est pas la même chose que pas de données, il représente plutôt des données inconnues.
Exemple n°1
Créer une table Employes avec des colonnes NOT NULL.
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL,
Age INT NOT NULL,
Salaire DECIMAL (18, 2),
PRIMARY KEY (Id)
);Exemple n°2
Ajouter une contrainte NOT NULL à une colonne existante (MySQL).
ALTER TABLE Employes
MODIFY Salaire DECIMAL (18, 2) NOT NULL;2. Contrainte DEFAULT
La contrainte DEFAULT fournit une valeur par défaut à une colonne lorsque l'instruction INSERT INTO ne fournit pas de valeur spécifique.
Exemple n°3
Créer une table avec une valeur par défaut pour Salaire.
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL,
Age INT NOT NULL,
Salaire DECIMAL (18, 2) DEFAULT 5000.00,
PRIMARY KEY (Id)
);Exemple n°4
Ajouter une contrainte DEFAULT à une colonne existante (MySQL).
ALTER TABLE Employes
MODIFY Salaire DECIMAL (18, 2) DEFAULT 5000.00;Pour supprimer une contrainte DEFAULT (SQL Server) :
ALTER TABLE Conges
ALTER COLUMN Salaire DROP DEFAULT;3. Contrainte UNIQUE
La contrainte UNIQUE empêche que deux enregistrements aient des valeurs identiques dans une colonne.
Exemple n°5
Créer une table avec une colonne UNIQUE (Nom).
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL UNIQUE,
Age INT NOT NULL,
Salaire DECIMAL (18, 2),
PRIMARY KEY (Id)
);Exemple n°6
Ajouter une contrainte UNIQUE à une colonne existante (MySQL).
ALTER TABLE Employes
MODIFY Nom VARCHAR(20) NOT NULL UNIQUE;4. Contrainte CHECK
La contrainte CHECK active une condition permettant de vérifier la valeur saisie dans un enregistrement. Si la condition est évaluée à false, l'enregistrement viole la contrainte et n'est pas entré dans la table.
Exemple n°7
Créer une table avec une contrainte CHECK sur Age (>= 18).
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL,
Age INT NOT NULL CHECK (Age >= 18),
Salaire DECIMAL (18, 2),
PRIMARY KEY (Id)
);Exemple n°8
Ajouter une contrainte CHECK à une colonne existante (MySQL).
ALTER TABLE Employes
MODIFY Age INT NOT NULL CHECK (Age >= 18);5. Contrainte INDEX
L'INDEX est utilisé pour créer et récupérer des données de la base de données très rapidement. Un index peut être créé en utilisant une seule colonne ou un groupe de colonnes dans une table.
Les index appropriés sont bons pour les performances dans les bases de données volumineuses, mais vous devez être prudent lors de la création d'un index. La sélection des champs dépend de ce que vous utilisez dans vos requêtes SQL.
Création d'un index
CREATE INDEX nom_index
ON nom_table (colonne1, colonne2, ...);Exemple n°9
Créer un index sur la colonne Age pour optimiser les recherches.
CREATE INDEX idx_age
ON Employes (Age);Exemple n°10
Supprimer un index.
ALTER TABLE Employes
DROP INDEX idx_age;6. Contrainte PRIMARY KEY
Une clé primaire est un champ dans une table qui identifie de manière unique chaque ligne/enregistrement dans une table de base de données. Les clés primaires doivent contenir des valeurs uniques. Une colonne de clé primaire ne peut pas avoir de valeur NULL.
Une table ne peut avoir qu'une seule clé primaire, qui peut consister en un ou plusieurs champs (clé composite).
Exemple n°11
Définir Id comme clé primaire lors de la création.
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL,
Age INT NOT NULL,
Salaire DECIMAL (18, 2),
PRIMARY KEY (Id)
);Exemple n°12
Ajouter une clé primaire à une table existante.
ALTER TABLE Employes
ADD PRIMARY KEY (Id);Si vous utilisez l'instruction ALTER TABLE pour ajouter une clé primaire, les colonnes de clé primaire doivent déjà avoir été déclarées comme ne contenant pas de valeurs NULL (lors de la création de la table).
Exemple n°13
Définir une clé primaire composite (Id + Nom).
CREATE TABLE Employes(
Id INT NOT NULL,
Nom VARCHAR (20) NOT NULL,
Age INT NOT NULL,
Salaire DECIMAL (18, 2),
PRIMARY KEY (Id, Nom)
);Exemple n°14
Ajouter une clé primaire composite à une table existante.
ALTER TABLE Employes
ADD PRIMARY KEY (Id, Nom);Exemple n°15
Supprimer une clé primaire.
ALTER TABLE Employes DROP PRIMARY KEY;7. Contrainte FOREIGN KEY
Une clé étrangère est une clé utilisée pour relier deux tables. C'est une colonne ou une combinaison de colonnes dont les valeurs correspondent à une clé primaire dans une autre table.
Exemple n°16
Créer une table Conges avec une clé étrangère vers Employes.
CREATE TABLE Conges(
Id INT NOT NULL,
Date_debut DATE,
Date_fin DATE,
ID_EMP INT,
PRIMARY KEY (Id),
FOREIGN KEY (ID_EMP) REFERENCES Employes(Id)
);Ou avec une syntaxe alternative :
CREATE TABLE Conges(
Id INT NOT NULL,
Date_debut DATE,
Date_fin DATE,
ID_EMP INT REFERENCES Employes(Id),
PRIMARY KEY (Id)
);Exemple n°17
Ajouter une clé étrangère à une table existante.
ALTER TABLE Conges
ADD FOREIGN KEY (ID_EMP) REFERENCES Employes(Id);Exemple n°18
Supprimer une clé étrangère.
ALTER TABLE Conges
DROP FOREIGN KEY;Suppression des contraintes
Toute contrainte que vous avez définie peut être supprimée à l'aide de la commande ALTER TABLE avec l'option DROP CONSTRAINT.
ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte;Récapitulatif des contraintes
| Contrainte | Description | Exemple |
|---|---|---|
| NOT NULL | Empêche les valeurs NULL | Nom VARCHAR(20) NOT NULL |
| DEFAULT | Valeur par défaut | Salaire DECIMAL DEFAULT 5000 |
| UNIQUE | Valeurs uniques dans la colonne | Email VARCHAR(100) UNIQUE |
| CHECK | Condition à vérifier | Age INT CHECK (Age >= 18) |
| PRIMARY KEY | Identifiant unique (NOT NULL + UNIQUE) | PRIMARY KEY (Id) |
| FOREIGN KEY | Référence à une autre table | FOREIGN KEY (ID_EMP) REFERENCES Employes(Id) |
| INDEX | Optimisation des recherches | CREATE INDEX idx_age ON Employes(Age) |
- Les contraintes garantissent l'intégrité et la fiabilité des données.
- NOT NULL : interdit les valeurs NULL.
- DEFAULT : fournit une valeur par défaut.
- UNIQUE : garantit l'unicité des valeurs.
- CHECK : valide les données selon une condition.
- PRIMARY KEY : identifiant unique de chaque ligne (NOT NULL + UNIQUE).
- FOREIGN KEY : établit une relation entre tables.
- INDEX : améliore les performances des requêtes.
- Les contraintes peuvent être ajoutées/modifiées/supprimées avec ALTER TABLE.
- Une table ne peut avoir qu'une seule PRIMARY KEY, mais plusieurs UNIQUE.
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.