Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment créer une table avec une contrainte de clé étrangère dans SQL Server - Tutoriel SQL Server / TSQL Partie 66

Qu'est-ce qu'une clé étrangère dans la table SQL Server :

La clé étrangère dans une table est une colonne ou un groupe de colonnes qui fournit un lien entre les données de deux tables. La clé étrangère d'une table pointe vers la clé primaire d'une autre table.
Créons dbo.Customer Table avec la clé primaire en utilisant l'instruction DDL ci-dessous
USE YourDatabaseNameGOCREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )
 Comme vous pouvez le voir, Customerid est la clé primaire dans dbo.Customer Table.
Comme nous sommes prêts avec notre première table et avons la clé primaire, nous sommes prêts à créer une deuxième table avec une contrainte de clé étrangère.
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) )
 
 
 Vous pouvez voir que nous avons ajouté la colonne Customer_id dans la table dbo.Orders qui fait référence à Customerid dans la table dbo.Customer.
La clé primaire dans la première table est Customerid et la colonne de clé étrangère dans la deuxième table est Customer_id, ce qui signifie que les colonnes n'ont pas besoin d'avoir les mêmes noms. C'est une bonne idée de garder le même nom pour que lorsque vous écrivez des requêtes et rejoignez les tables, vous n'ayez pas à regarder quelle est la clé primaire et quelle est la clé étrangère, vous sauriez plutôt que les mêmes noms de colonne sont en relation .
Insérons quelques enregistrements et voyons comment fonctionne la contrainte de clé étrangère.
 insérez dans dbo.Customer (CustomerId,FName, LName,SSN) les valeurs (1,'Aamir', 'Shahzad','000-000-00') insérer dans dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) valeurs ('TV',1,1)
 
 Les deux enregistrements seront insérés très bien, car nous insérons le même ID client dans dbo.Orders qui existe dans dbo.Customer.
Si nous essayons d'insérer une valeur dans dbo.Orders qui n'est pas présente dans dbo.Customer (CustomerId), il passera par une erreur due à une contrainte de clé étrangère.
 insérer dans dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) les valeurs ('TV',1,2)

Lorsque nous exécutons la requête ci-dessus, nous rencontrons une erreur car nous n'avons pas 2 comme Customerid dans la table dbo.Customer.
Msg 547, Niveau 16, État 0, Ligne 28L'instruction INSERT est en conflit avec la FOREIGN KEY contrainte "FK__Orders__Customer__286302EC". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer", colonne 'Customerid'. La déclaration a été terminée.

Démonstration vidéo :qu'est-ce que la contrainte de clé étrangère et comment la créer Contrainte de clé étrangère en SQL