clé étrangère SQL Server
résumé: dans ce tutoriel, vous apprendrez à utiliser la contrainte de clé étrangère SQL Server pour imposer un lien entre les données de deux tables.
Introduction à la contrainte de clé étrangère SQL Server
considérez les tablesvendor_groups
Etvendors
:
chaque fournisseur appartient à un groupe de fournisseurs et chaque groupe de fournisseurs peut avoir zéro ou plusieurs fournisseurs. La relation entre les tablesvendor_groups
etvendors
est un à plusieurs.,
Pour chaque ligne dans la balise vendors
le tableau, vous pouvez toujours trouver une ligne correspondante dans la balise vendor_groups
tableau.
Cependant, avec les tables de configuration, vous pouvez insérer une ligne dans la balise vendors
table sans ligne correspondante dans la balise vendor_groups
tableau. De même, vous pouvez également supprimer une ligne dans la table vendor_groups
sans mettre à jour ou supprimer les lignes correspondantes dans la table vendors
qui entraîne des lignes orphelines dans la table vendors
.,
Pour appliquer le lien entre les données dans le vendor_groups
et vendors
tables, vous devez établir une clé étrangère dans la balise vendors
tableau.
Une clé étrangère est une colonne ou un groupe de colonnes d’une table qui identifie de manière unique une ligne d’une autre table (ou la même table en cas d’auto-référence).
Pour créer une clé étrangère, vous utilisez la balise FOREIGN KEY
contrainte.,
les instructions suivantes déposent lavendors
table et la recréent avec uneFOREIGN KEY
contrainte:
lavendor_groups
table est maintenant appelée la table parent qui est la table à laquelle la contrainte de clé étrangère fait référence. La tablevendors
est appelée la table enfant qui est la table à laquelle la contrainte de clé étrangère est appliquée.,
Dans la déclaration ci-dessus, la clause suivante crée un FOREIGN KEY
contrainte nommé fk_group
qui relie le group_id
dans le vendors
tableau group_id
dans le vendor_groups
table:
SQL Server contrainte de CLÉ ÉTRANGÈRE de la syntaxe
La syntaxe générale pour la création d’un FOREIGN KEY
contrainte est comme suit:
nous allons examiner cette syntaxe dans le détail.,
tout d’abord, spécifiez le nom de la contrainteFOREIGN KEY
après le mot-cléCONSTRAINT
. Le nom de la contrainte est facultatif, il est donc possible de définir une contrainte FOREIGN KEY
comme suit:
dans ce cas, SQL Server générera automatiquement un nom pour la contrainte FOREIGN KEY
.
deuxièmement, spécifiez une liste de colonnes de clés étrangères séparées par des virgules, entourées de parenthèses après le mot-clé FOREIGN KEY
.,
Troisièmement, spécifiez le nom de la table parent à laquelle la clé étrangère fait référence et une liste de colonnes séparées par des virgules qui a un lien avec la colonne de la table enfant.
exemple de contrainte de clé étrangère SQL Server
tout d’abord, insérez quelques lignes dans la vendor_groups
table:
Deuxièmement, insérez un nouveau fournisseur avec un groupe de fournisseurs dans lavendors
table:
Code language: SQL (Structured Query Language) (sql)
éclaration a fonctionné comme prévu .,
Troisièmement, essayez d’insérer un nouveau fournisseur dont le groupe n’existe pas dans le vendor_groups
table:
Code language: SQL (Structured Query Language) (sql)
SQL Server émis l’erreur suivante:
Dans cet exemple, en raison de la balise FOREIGN KEY
contrainte, SQL Server a rejeté l’insertion et délivré un message d’erreur.
actions référentielles
la contrainte de clé étrangère assure l’intégrité référentielle. Cela signifie que vous ne pouvez insérer une ligne dans la table enfant si il ya une ligne correspondante dans la table parent.,
En outre, la contrainte de clé étrangère vous permet de définir les actions référentielles lorsque la ligne de la table parente est mise à jour ou supprimée comme suit:
LesON UPDATE
EtON DELETE
spécifient l’action qui s’exécutera lorsqu’une ligne de la table parente, Les éléments suivants sont autorisés actions : NO ACTION
, CASCADE
, SET NULL
et SET DEFAULT
Suppression de lignes dans la table parent
Si vous supprimez une ou plusieurs lignes dans la table parent, vous pouvez choisir l’une des actions suivantes:
-
ON DELETE NO ACTION
: SQL Server génère une erreur et annule la suppression de la ligne dans la table parent. -
ON DELETE CASCADE
: SQL Server supprime les lignes dans la table enfant est correspondante à la ligne supprimée de la table parent., -
ON DELETE SET NULL
: SQL Server définit les lignes dans la table enfant deNULL
si les lignes correspondantes dans la table parent sont supprimés. Pour exécuter cette action, les colonnes de clé étrangère doivent être nullables. -
ON DELETE SET DEFAULT
SQL Server définit les lignes de la table enfant à leurs valeurs par défaut si les lignes correspondantes de la table parent sont supprimées. Pour exécuter cette action, les colonnes de clé étrangère doivent avoir des définitions par défaut. Notez que nullable colonne a une valeur par défaut deNULL
si aucune valeur par défaut n’est spécifiée.,
par défaut, SQL Server appliqueON DELETE NO ACTION
si vous ne spécifiez pas explicitement d’action.
action de mise à jour des lignes de la table parente
Si vous mettez à jour une ou plusieurs lignes de la table parente, vous pouvez définir l’une des actions suivantes:
-
ON UPDATE NO ACTION
: SQL Server déclenche une erreur et annule l’action de mise à jour sur -
ON UPDATE CASCADE
: SQL Server met à jour les lignes correspondantes de la table enfant lorsque les lignes de la table parent sont mises à jour., -
ON UPDATE SET NULL
: SQL Server définit les lignes de la table enfant surNULL
lorsque la ligne correspondante de la table parent est mise à jour. Notez que les colonnes de clé étrangère doivent être nullables pour que cette action s’exécute. -
ON UPDATE SET DEFAULT
: SQL Server définit les valeurs par défaut pour les lignes de la table enfant dont les lignes correspondantes de la table parent sont mises à jour.