Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak utworzyć tabelę z ograniczeniem klucza obcego w SQL Server — samouczek SQL Server / TSQL, część 66

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połączenie JDBC nie powiodło się, błąd:połączenie TCP/IP z hostem nie powiodło się

  2. Jak połączyć wiele wierszy w listę rozdzielaną przecinkami w SQL Server 2005?

  3. INFORMATION_SCHEMA vs sysobjects

  4. SQL Server - podsłuchiwanie parametrów

  5. Co to jest blokowanie serwera SQL?