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