Partager via


CONSTRAINT, clause (Microsoft Access SQL)

S’applique à : Access 2013, Office 2013

Une contrainte est similaire à un index, bien qu'elle puisse être utilisée pour établir une relation avec une autre table.

Utilisez 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 permettant de créer une contrainte sur un seul champ et l'autre permettant de créer une contrainte sur plusieurs champs.

Remarque

Le moteur de base de données Microsoft Access ne prend pas en charge la clause CONSTRAINT, ni les instructions du langage de définition de données (DDL), avec des bases de données autres que Microsoft Access. Utilisez plutôt les méthodes Create de DAO.

Syntaxe

Contrainte sur un seul champ

NOM DE CONTRAINTE {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES foreigntable [(foreignfield1, foreignfield2)] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}

Contrainte sur plusieurs champs

NOM DE CONTRAINTE {PRIMARY KEY (primary1[, primary2 [, ...]]) | UNIQUE (unique1[, unique2 [, ...]]) | NOT NULL (notnull1[, notnull2 [, ...]]) | FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}

La clause CONSTRAINT comprend les deux parties suivantes :

Quitter

Description

name

Nom de la contrainte à créer.

primary1, primary2

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

unique1, unique2

Nom du ou des champs à désigner en tant que clé unique.

notnull1, notnull2

Nom du ou des champs limités à des valeurs non Null.

ref1, ref2

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

foreigntable

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

foreignfield1, foreignfield2

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

Remarques

Vous utilisez la syntaxe pour une contrainte sur champ unique dans la clause de définition de champ d’une instruction ALTER TABLE ou CREATE TABLE qui suit immédiatement la spécification du type de données du champ.

Utilisez la syntaxe d'une contrainte sur plusieurs champs quand vous employez le mot réservé CONSTRAINT en dehors d'une clause de définition de champ dans une instruction ALTER TABLE ou CREATE TABLE.

La clause CONSTRAINT vous permet de désigner un champ comme l'une des contraintes suivantes :

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

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

    Remarque

    Ne définissez pas une contrainte PRIMARY KEY sur une table possédant déjà une clé primaire. Si vous le faites, une erreur se produit.

  • 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 plusieurs champs, vous devez utiliser une définition de contrainte à plusieurs champs, en répertoriant tous les champs de référencement, le nom de la table étrangère et les noms des champs référencés dans la table étrangère dans le même ordre que celui des champs de référencement. 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 correspondante 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 dans la table sur laquelle la clause CONSTRAINT est définie. Par exemple, examinez la définition suivante de la table Customers :

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

    Examinez la définition suivante de la table Orders qui décrit une relation de clé étrangère référençant 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
    

    Les deux clauses ON UPDATE CASCADE et ON DELETE CASCADE sont définies sur la clé étrangère. La clause ON UPDATE CASCADE indique que si l'identificateur d'un client (CustId) est modifié dans la table Customer, le nouvel identificateur sera répercuté dans la table Orders. Chaque commande contenant l'identificateur du client sera mise à jour avec le nouvel identificateur. La clause ON DELETE CASCADE indique que si un client est supprimé de la table Customer, toutes les lignes de la table Orders contenant l'identificateur de ce client seront également supprimées. Examinez cette autre définition de la table Orders qui utilise 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 indique que si l'identificateur d'un client (CustId) est modifié dans la table Customer, les valeurs de clé étrangère correspondantes dans la table Orders prendront automatiquement la valeur NULL. De même, la clause ON DELETE SET NULL indique que si un client est supprimé de la table Customer, toutes les clés étrangères correspondantes dans la table Orders prendront automatiquement la valeur NULL.

Pour empêcher la création automatique d'index de clés étrangères, le modificateur NO INDEX peut être utilisé. Cette forme de définition de clé étrangère doit être utilisée seulement lorsque les valeurs d'index produites sont fréquemment dupliquées. Dans ce cas, utiliser un index peut être moins efficace qu'effectuer simplement une analyse de la table. Créer ce type d'index, qui implique l'insertion et la suppression de lignes dans la table, nuit aux performances et ne présente aucun avantage.

Exemple

Cet exemple crée une nouvelle table appelée ThisTable qui comporte deux champs de texte.

 Sub CreateTableX1()    
Dim dbs As Database 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Create a table with two text fields. 
    dbs.Execute "CREATE TABLE ThisTable " _ 
        & "(FirstName CHAR, LastName CHAR);" 
 
    dbs.Close 
 
End Sub

Cet exemple crée une nouvelle table appelée MyTable avec deux champs de texte, un champ Date/Heure et un index unique composé de ces trois champs.

    Sub CreateTableX2() 
     
        Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
     
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a table with three fields and a unique 
        ' index made up of all three fields. 
        dbs.Execute "CREATE TABLE MyTable " _ 
            & "(FirstName CHAR, LastName CHAR, " _ 
            & "DateOfBirth DATETIME, " _ 
            & "CONSTRAINT MyTableConstraint UNIQUE " _ 
            & "(FirstName, LastName, DateOfBirth));" 
     
        dbs.Close 
     
    End Sub

Cet exemple crée une nouvelle table avec deux champs de texte et un champ Entier. Le champ SSN correspond à la clé primaire.

    Sub CreateTableX3() 
     
         Dim dbs As Database 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Create a table with three fields and a primary 
        ' key. 
        dbs.Execute "CREATE TABLE NewTable " _ 
            & "(FirstName CHAR, LastName CHAR, " _ 
            & "SSN INTEGER CONSTRAINT MyFieldConstraint " _ 
            & "PRIMARY KEY);" 
     
        dbs.Close 
     
    End Sub