sql >> Databáze >  >> RDS >> Sqlserver

Jak vytvořit tabulku s omezením cizího klíče v SQL Server - SQL Server / TSQL výukový program, část 66

Co je cizí klíč v tabulce serveru SQL:

Cizí klíč v tabulce je sloupec nebo skupina sloupců, které poskytují propojení mezi daty ve dvou tabulkách. Cizí klíč v tabulce ukazuje na primární klíč v jiné tabulce.
Pojďme vytvořit tabulku dbo.Customer s primárním klíčem pomocí níže uvedeného příkazu DDL
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Jak můžete vidět, že Customerid je primární klíč v dbo.Customer Table.
Protože jsme připraveni s naší první tabulkou a máme primární klíč, je dobré jít a vytvořit druhou tabulku s omezením cizího klíče.
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 Můžete vidět, že jsme přidali sloupec Customer_id do tabulky dbo.Orders, který odkazuje na Customerid v tabulce dbo.Customer.
Primární klíč v první tabulce je Customerid a Sloupec cizího klíče ve druhé tabulce je Customer_id, to znamená sloupce nemusí mít stejná jména. Je dobré zachovat stejný název, takže když píšete dotazy a spojujete tabulky, nemusíte se dívat, který je primární klíč a který je cizí klíč, místo toho byste věděli, že stejné názvy sloupců jsou ve vztahu .
Pojďme vložit několik záznamů a uvidíme, jak funguje omezení cizího klíče.
    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 záznamy budou vloženy v pořádku, protože do dbo.Orders vkládáme stejné číslo zákazníka, které existuje v dbo.Customer.
Pokud se pokusíme vložit jakoukoli hodnotu do dbo.Orders, která není přítomná v dbo.Customer (CustomerId), dojde k chybě kvůli omezení cizího klíče.
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Když spustíme dotaz výše, dojde k chybě, protože v tabulce dbo.Customer nemáme 2 jako Customerid.
Zpráva 547, úroveň 16, stav 0, řádek 28 Příkaz INSERT je v konfliktu s FOREIGN KEY omezení "FK__Orders__Customer__286302EC". Ke konfliktu došlo v databázi "YourDatabaseName", tabulce "dbo.Customer", sloupci 'Customerid'. Příkaz byl ukončen.

Video Demo :Co je omezení cizího klíče a jak jej vytvořit Omezení cizího klíče v SQL


  1. Oracle sekvence, ale pak v MS SQL Server

  2. Vytvořte HTML tabulku pomocí SQL FOR XML

  3. Jak exportovat všechna data z tabulky do vložitelného formátu SQL?

  4. Mohou komentáře bránit výkonu uložené procedury?