Les contraintes en SQL

22 Sep 2019 22 Sep 2019 48638 vues ESSADDOUKI Mostafa 7 min de lecture

Les contraintes en SQL

Définition

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.

Niveaux de contraintes

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

Description

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

Description

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

Description

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

Description

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

Description

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 SQL
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

Description

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);
Attention !

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

Description

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

Description

Toute contrainte que vous avez définie peut être supprimée à l'aide de la commande ALTER TABLE avec l'option DROP CONSTRAINT.

   
DROP CONSTRAINT SQL
ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte;

Récapitulatif des contraintes

ContrainteDescriptionExemple
NOT NULLEmpêche les valeurs NULLNom VARCHAR(20) NOT NULL
DEFAULTValeur par défautSalaire DECIMAL DEFAULT 5000
UNIQUEValeurs uniques dans la colonneEmail VARCHAR(100) UNIQUE
CHECKCondition à vérifierAge INT CHECK (Age >= 18)
PRIMARY KEYIdentifiant unique (NOT NULL + UNIQUE)PRIMARY KEY (Id)
FOREIGN KEYRéférence à une autre tableFOREIGN KEY (ID_EMP) REFERENCES Employes(Id)
INDEXOptimisation des recherchesCREATE INDEX idx_age ON Employes(Age)
Points clés à retenir
  • 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.
SQL

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.