Création et modification des contraintes FOREIGN KEY

Vous pouvez créer une contrainte FOREIGN KEY dans le cadre de la définition d'une table lorsque vous créez celle-ci. Si une table existe déjà, vous pouvez ajouter une contrainte FOREIGN KEY, sous réserve que celle-ci soit liée à une contrainte PRIMARY KEY ou UNIQUE existante dans la même table ou dans une autre. Une table peut contenir plusieurs contraintes FOREIGN KEY.

Si une contrainte FOREIGN KEY existe déjà, vous pouvez la modifier ou la supprimer, par exemple si vous souhaitez que la contrainte FOREIGN KEY de la table référence d'autres colonnes. Toutefois, vous ne pouvez pas modifier la longueur d'une colonne définie avec une contrainte FOREIGN KEY.

[!REMARQUE]

Pour modifier une contrainte FOREIGN KEY, vous devez d'abord supprimer la contrainte FOREIGN KEY existante, puis la recréer avec sa nouvelle définition.

Supprimez une contrainte FOREIGN KEY pour lever l'obligation d'intégrité référentielle entre les colonnes de clé étrangère et les colonnes de clé primaire, ou contrainte UNIQUE, associées dans une autre table.

Pour créer une contrainte FOREIGN KEY lors de la création d'une table

CREATE TABLE (Transact-SQL)

Pour créer une contrainte FOREIGN KEY sur une table existante

ALTER TABLE (Transact-SQL)

Procédure : créer des relations entre tables (Visual Database Tools)

Pour supprimer une contrainte FOREIGN KEY

ALTER TABLE (Transact-SQL)

Application d'une contrainte FOREIGN KEY à l'aide de WITH NOCHECK

Lorsque vous ajoutez une contrainte FOREIGN KEY à une colonne ou à des colonnes existantes dans une table, par défaut, le Moteur de base de données examine les données existant dans les colonnes afin de s'assurer que toutes les valeurs, à l'exception de NULL, existent dans les colonnes de la contrainte PRIMARY KEY ou UNIQUE référencée. Il est toutefois possible, en spécifiant WITH NOCHECK, d'empêcher le Moteur de base de données de vérifier les données de la colonne en fonction de la nouvelle contrainte et de lui demander d'ajouter la nouvelle contrainte, sans tenir compte des données de la colonne. L'option WITH NOCHECK est utile si les données existantes satisfont déjà à la nouvelle contrainte FOREIGN KEY ou si une règle d'entreprise exige l'application de la contrainte à partir du moment présent seulement.

Faites néanmoins preuve de prudence lorsque vous ajoutez une contrainte sans vérifier les données existantes car, lors d'une telle opération, les contrôles du Moteur de base de données qui assurent l'intégrité des données de la table ne sont pas mis en œuvre.

Pour empêcher la vérification des données existantes lorsque vous créez une contrainte FOREIGN KEY

ALTER TABLE (Transact-SQL)

Désactivation des contraintes FOREIGN KEY

Vous pouvez désactiver les contraintes FOREIGN KEY existantes pour des opérations spécifiques, telles que les opérations INSERT, UPDATE et le traitement de la réplication.

  • Instructions INSERT et UPDATE

    La désactivation d'une contrainte FOREIGN KEY permet de modifier les données de la table sans qu'elles soient validées par les contraintes. Désactivez une contrainte FOREIGN KEY lors de l'exécution d'instructions INSERT et UPDATE si des nouvelles données violent la contrainte ou que cette dernière ne doit s'appliquer qu'aux seules données figurant déjà dans la base de données.

    [!REMARQUE]

    Aucune action en cascade définie sur une clé primaire associée n'est réalisée sur les lignes qui contiennent des clés étrangères désactivées.

  • Traitement de la réplication

    Désactivez une contrainte FOREIGN KEY pendant la réplication si la contrainte est spécifique à la base de données source. Lors d'une réplication de table, la définition et les données de cette table sont copiées de la base de données source vers une base de données de destination. Si les contraintes FOREIGN KEY sont spécifiques à la base de données source mais ne sont pas désactivées durant la réplication, elles risquent d'empêcher inutilement l'entrée de nouvelles données dans la base de données de destination. Pour plus d'informations, consultez Contrôle des contraintes, des identités et des déclencheurs avec l'option NOT FOR REPLICATION.

Pour désactiver une contrainte FOREIGN KEY pour des instructions INSERT et UPDATE

ALTER TABLE (Transact-SQL)

Procédure : désactiver les contraintes de clé étrangère avec des instructions INSERT et UPDATE (Visual Database Tools)

Pour désactiver une contrainte FOREIGN KEY au moment de la réplication

ALTER TABLE (Transact-SQL)

Procédure : désactiver des contraintes de clé étrangère pour la réplication (Visual Database Tools)

Pour obtenir des informations sur les contraintes FOREIGN KEY

sys.foreign_keys (Transact-SQL)

Pour obtenir des informations sur les colonnes qui composent une contrainte FOREIGN KEY

sys.foreign_key_columns (Transact-SQL)

Voir aussi

Concepts