Articles

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 lavendorstable 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 de NULL 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 de NULL 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.