CONSTRAINT, clause

Important :  Cet article a été traduit automatiquement, voir l’avertissement. Vous pouvez consulter la version en anglais de cet article ici.

Une contrainte est semblable à un index, à ceci près qu'elle peut également être utilisée pour établir une relation avec une autre table.

Vous pouvez utiliser la clause CONSTRAINT dans les instructions ALTER TABLE et CREATE TABLE pour créer ou supprimer des contraintes. Il existe deux types de clauses CONSTRAINT : une pour créer une contrainte sur un seul champ, une autre pour créer une contrainte sur plusieurs champs.

Remarque : Le moteur de base de données Microsoft Access ne prend pas en charge l’utilisation de CONTRAINTE, ou un des instructions data definition language, les bases de données Microsoft Access. Utilisez les méthodes Create DAO à la place.

Syntaxe

Contrainte sur champ unique :

Nom de la CONTRAINTE {CLÉ PRIMAIRE | UNIQUES | NON NULL |
RÉFÉRENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | La VALEUR NULL]
[SUPPRESSION en CASCADE | LA VALEUR NULL]}

Contrainte sur plusieurs champs :

Nomde la CONTRAINTE
{CLÉ PRIMAIRE (primary1[, primary2 [,...]]) |
UNIQUES (unique1[, unique2 [,...]]) |
PAS NULL (notnull1[, notnull2 [,...]]) |
CLÉ ÉTRANGÈRE [AUCUN INDEX] (réf1[, réf2 [,...]]) RÉFÉRENCES foreigntable [(foreignfield1 [, foreignfield2 [,...]])]
[ON mise à JOUR en CASCADE | La VALEUR NULL]
[SUPPRESSION en CASCADE | LA VALEUR NULL]}

La clause CONSTRAINT se compose des éléments suivants :

Composant

Description

nom

Nom de la contrainte à créer.

primaire1, primaire2

Nom du ou des champs à désigner comme clé primaire.

unique1, unique2

Nom du ou des champs à désigner comme clé unique.

non_null1, non_null2

Le nom de l’ou les champs qui sont limités à des valeurs non Null.

réf1, réf2

Nom du ou des champs de clé étrangère qui font référence à des champs d'une autre table.

tableétrangère

Nom de la table étrangère contenant le ou les champs spécifiés par champétranger.

champétranger1, champétranger2

Nom du ou des champs de tableétrangère spécifiés par réf1, réf2. Vous pouvez omettre cette clause si le champ référencé est la clé primaire de tableétrangère.


Notes

Vous utilisez la syntaxe d'une contrainte pour champ unique dans la clause de définition de champ d'une instruction ALTER TABLE ou CREATE TABLE immédiatement après la spécification du type de données du champ.

Vous utilisez la syntaxe d'une contrainte pour champs multiples dès que vous utilisez le mot réservé CONSTRAINT en dehors d'une clause de définition de champ dans une instruction ALTER TABLE ou CREATE TABLE.

CONSTRAINT vous permet de désigner un champ comme l'un des types de contraintes suivants :

  • Vous pouvez utiliser le mot réservé UNIQUE pour désigner un champ en tant que clé unique. Cela signifie que deux enregistrements de la table ne peuvent pas avoir la même valeur dans ce champ. Vous pouvez contraindre n'importe quel champ ou n'importe quelle liste de champs comme étant unique. Si une contrainte multichamp est désignée comme une clé unique, les valeurs combinées de tous les champs de l'index doivent être uniques, même si plusieurs enregistrements ont la même valeur dans un des champs.

  • Vous pouvez utiliser les mots réservés PRIMARY KEY pour désigner un champ ou ensemble de champs dans une table en tant que clé primaire. Toutes les valeurs de la clé primaire doivent être uniques, non Null, et il ne peut y avoir qu'une clé primaire par table.

    Remarque : Ne définissez pas de contrainte PRIMARY KEY sur une table qui possède déjà une clé primaire. Une erreur se produira si vous le faites.

  • Vous pouvez utiliser les mots réservés FOREIGN KEY pour désigner un champ en tant que clé étrangère. Si la clé primaire de la table étrangère se compose de plus d'un champ, vous devez utiliser une définition de contrainte multichamp, répertoriant tous les champs référençants, le nom de la table étrangère, et le nom des champs référencés dans la table étrangère dans le même ordre que les champs référençants. Si le ou les champs référencés sont la clé primaire de la table étrangère, vous n'avez pas besoin de spécifier les champs référencés. Par défaut, le moteur de base de données se comporte comme si la clé primaire de la table étrangère était les champs référencés.

    Les contraintes de clé étrangère définissent des actions spécifiques à effectuer lorsqu'une valeur de clé primaire est modifiée :

  • Vous pouvez spécifier les actions à effectuer sur la table étrangère en fonction de l'action correspondante effectuée sur une clé primaire sur la table dans laquelle la clause CONSTRAINT est définie. Prenez par exemple la définition suivante pour la table Customers :

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Prenez la définition suivante de la table Orders, qui définit une relation de clé étrangère faisant référence à la clé primaire de la table Customers :

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Deux clauses, ON UPDATE CASCADE et ON DELETE CASCADE, sont définies sur la clé étrangère. La clause ON UPDATE CASCADE signifie que si un identificateur de client (CustId) est mis à jour dans la table Customer, la mise à jour sera répercutée dans la table Orders. Chaque commande contenant une valeur d'identification de client correspondante sera automatiquement mise à jour avec la nouvelle valeur. La clause ON DELETE CASCADE signifie que si un client est supprimé de la table Customer, toutes les lignes de la table Orders contenant la même valeur d'identification de client seront également supprimées.

Prenez la définition différente suivante de la table Orders, en utilisant l'action SET NULL à la place de l'action CASCADE :

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

La clause ON UPDATE SET NULL signifie que si un identificateur de client (CustId) est mis à jour dans la table Customer, les valeurs de clé étrangère correspondantes dans la table Orders seront automatiquement définies comme NULL. De même, la clause ON DELETE SET NULL signifie que si un client est supprimé de la table Customer, toutes les clés étrangères correspondantes de la table Orders seront automatiquement définies comme NULL.

Pour empêcher la création automatique d'index pour les clés étrangères, vous pouvez utiliser le modificateur NO INDEX. Cette forme de définition de clé étrangère doit être uniquement utilisée dans les cas où les valeurs d'index résultantes seraient fréquemment dupliquées. Lorsque les valeurs d'un index de clé étrangère sont fréquemment dupliquées, l'utilisation d'un index peut être moins efficace qu'une simple analyse de table. La maintenance d'un index de ce type, compte tenu des lignes insérées et supprimées dans la table, nuit aux performances sans offrir aucun avantage.



Remarque : Avertissement traduction automatique : cet article a été traduit par un ordinateur, sans intervention humaine. Microsoft propose cette traduction automatique pour offrir aux personnes ne maîtrisant pas l’anglais l’accès au contenu relatif aux produits, services et technologies Microsoft. Comme cet article a été traduit automatiquement, il risque de contenir des erreurs de grammaire, de syntaxe ou de terminologie.

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoignez le programme Office Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×