Co to jest klucz obcy w tabeli SQL Server:
Klucz obcy w tabeli to kolumna lub grupa kolumn, która zapewnia łącze między danymi w dwóch tabelach. Klucz obcy w tabeli wskazuje na klucz podstawowy w innej tabeli.Utwórzmy tabelę dbo.Customer z kluczem podstawowym za pomocą poniższej instrukcji DDL
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )
Jak widać, Customerid jest kluczem podstawowym w dbo.Customer Table.
Ponieważ jesteśmy gotowi z naszą pierwszą tabelą i mamy klucz podstawowy, możemy przejść i utworzyć drugą tabelę z ograniczeniem klucza obcego.
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) )
Widać, że dodaliśmy kolumnę Customer_id w tabeli dbo.Orders, która odwołuje się do Customerid w tabeli dbo.Customer.
Klucz podstawowy w pierwszej tabeli to Customerid, a kolumna klucza obcego w drugiej tabeli to Customer_id, co oznacza kolumny nie muszą mieć tych samych imion. Dobrze jest zachować tę samą nazwę, aby podczas pisania zapytań i łączenia tabel nie trzeba było patrzeć, który jest kluczem podstawowym, a który jest kluczem obcym, zamiast tego będziesz wiedział, że te same nazwy kolumn są ze sobą powiązane .
Wstawmy kilka rekordów i zobaczmy, jak działa ograniczenie klucza obcego.
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)
Oba rekordy zostaną wstawione dobrze, ponieważ wstawiamy ten sam identyfikator klienta w dbo.Orders, który istnieje w dbo.Customer.
Jeśli spróbujemy wstawić dowolną wartość w dbo.Orders, której nie ma w dbo.Customer (CustomerId), przejdzie przez błąd z powodu ograniczenia klucza obcego.
insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,2)
Kiedy uruchamiamy powyższe zapytanie, jest to błąd, ponieważ nie mamy 2 jako Customerid w tabeli dbo.Customer.
Msg 547, Level 16, State 0, Line 28. Instrukcja INSERT była w konflikcie z FOREIGN KEY ograniczenie „FK__Orders__Customer__286302EC”. Konflikt wystąpił w bazie danych "YourDatabaseName", tabeli "dbo.Customer", kolumnie "Customerid". Wyciąg został zakończony.
Wideo demonstracyjne:Co to jest ograniczenie klucza obcego i jak tworzyć Ograniczenie klucza obcego w SQL