Che cos'è la chiave esterna nella tabella di SQL Server:
La chiave esterna in una tabella è una colonna o un gruppo di colonne che fornisce un collegamento tra i dati in due tabelle. La chiave esterna in una tabella punta alla chiave primaria in un'altra tabella.Creiamo la tabella dbo.Customer con la chiave primaria utilizzando l'istruzione DDL sottostante
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )
Come puoi vedere Customerid è la chiave primaria in dbo.Customer Table.
Dato che siamo pronti con la nostra prima tabella e abbiamo la chiave primaria, siamo pronti a creare la seconda tabella con vincolo di chiave esterna.
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) )
Puoi vedere che abbiamo aggiunto la colonna Customer_id nella tabella dbo.Orders che fa riferimento a Customerid in dbo.Customer Table.
La chiave primaria nella prima tabella è Customerid e la colonna della chiave esterna nella seconda tabella è Customer_id, ciò significa che le colonne non devono avere gli stessi nomi. È una buona idea mantenere lo stesso nome così quando scrivi query e unisci le tabelle, non devi dare un'occhiata a quale è la chiave primaria e quale è la chiave esterna, invece sapresti che gli stessi nomi di colonna sono in relazione .
Inseriamo un paio di record e vediamo come funziona il vincolo di chiave esterna.
insert into dbo.Customer (CustomerId,FName, LName,SSN) values (1,'Aamir','Shahzad','000-000-00') insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,1)
Entrambi i record verranno inseriti correttamente, poiché stiamo inserendo lo stesso customerid in dbo.Orders che esiste in dbo.Customer.
Se proveremo a inserire qualsiasi valore in dbo.Orders che non è presente in dbo.Customer (CustomerId), si verificherà un errore dovuto al vincolo della chiave esterna.
insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,2)
Quando eseguiamo la query precedente, si verifica un errore poiché non abbiamo 2 come Customerid nella tabella dbo.Customer.
Msg 547, livello 16, stato 0, riga 28L'istruzione INSERT era in conflitto con la CHIAVE FOREIGN vincolo "FK__Ordini__Cliente__286302EC". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer", colonna 'Customerid'. L'istruzione è stata terminata.
Video Demo:cos'è il vincolo di chiave esterna e come crearlo Vincolo di chiave esterna in SQL