Úvod do cizího klíče v SQL

Cizí klíč je omezení v SQL. Používá se k propojení obou tabulek. Cizí klíč v jedné tabulce odkazuje na primární klíč v jiné tabulce. Cizí klíč lze použít k zajištění toho, aby řádek v jedné tabulce měl odpovídající řádek / řádky v jiné tabulce. Odkazovaná tabulka se nazývá nadřazená tabulka a tabulka s cizím klíčem se nazývá podřízená tabulka. Tento vztah rodič-dítě vynucuje pravidlo známé jako referenční integrita. Referenční integrita je vlastnost dat, která uvádí, že všechny její odkazy jsou platné.

Pokud tedy máte v databázi 1-to-many nebo many-to-many relace, budou cizí klíče velmi užitečné. Funguje jako křížový odkaz mezi dvěma tabulkami (parent_table a child_table), protože odkazuje na primární klíč jiné tabulky. Vytváří tak spojení mezi parent_table a child_table.

Syntax

Vytvoření nové tabulky pomocí cizího klíče vyžaduje oprávnění CREATE TABLE v databázi

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table je název tabulky, kterou vytvoříme
  • column_1, column_2- sloupce, které se mají přidat do tabulky.
  • F_key- Toto je omezení cizího klíče.
  • child_column1, child_column2… child_column_n- Je to jméno sloupců child_Table odkazujících na primární klíč v nadřazené tabulce.
  • Parent_Table - Toto je název parent_table. Primární klíč parent_table je uveden v child_table
  • ON DELETE - Tento parametr provede akci na podřízená data po odstranění nadřazených dat. SET NULL, NO ACTION, CASCADE, SET DEFAULT jsou některé z hodnot tohoto parametru.
  • ON UPDATE - Jedná se o volitelný parametr, který po aktualizaci na nadřazených datech provede akci s podřízenými daty. SET NULL, NO ACTION, CASCADE, SET DEFAULT jsou některé z hodnot tohoto parametru.
  • CASCADE - Můžeme to použít společně s ON DELETE a ON UPDATE. Po odstranění nebo aktualizaci nadřazených dat Podřízená data budou buď odstraněna, nebo aktualizována.

Vytvoření cizího klíče v existující tabulce vyžaduje ALTER oprávnění k tabulce.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Pravidla

  1. Cizí klíče nelze použít pro dočasné tabulky.
  2. Omezení cizího klíče nemusí být spojeno pouze s primárním klíčem jiné tabulky, může být také spojeno s omezením UNIQUE jiné tabulky.
  3. Omezení FOREIGN KEY mohou odkazovat na jiný sloupec ve stejné tabulce. Toto se označuje jako vlastní reference.
  4. Omezení cizího klíče se mohou vztahovat na tabulky ve stejné databázi.
  5. Do podřízené tabulky můžeme také vložit hodnoty NULL.
  6. Když do omezení cizího klíče vložíme jinou hodnotu než NULL, musí tato hodnota existovat v odkazovaném sloupci, jinak by došlo ke zprávě o narušení.
  7. Hodnotu jedinečných klíčů nadřazené nelze změnit, pokud je pravidlo aktualizace RESTRICT a jsou zde jeden nebo více závislých řádků. Pokud je však pravidlo aktualizace ŽÁDNÁ AKCE, jedinečné nadřazené klíče lze aktualizovat, pokud má každé dítě nadřazený klíč v době, kdy je dokončen aktualizační příkaz.

Příklady

Řekněme, že máme dvě tabulky Zákazníci a Objednávky. Tabulka Zákazníci obsahuje všechna data týkající se zákazníků a Tabulka Objednávky obsahující data týkající se objednávky zákazníků.

Zákazníci

Cust_idPrimární klíč
Cust_name
Umístění

Objednávky

Číslo objednávkyPrimární klíč
Datum objednávky
Množství
Cust_idCizí klíč
Celková částka

Ve výše uvedeném příkladu je sloupec Cust_id v tabulce ORDERS cizí klíč ukazující na sloupec Cust_id v tabulce ZÁKAZNÍCI.

Předpokládejme, že tyto tabulky mají následující hodnoty

Zákazníci

1001AlexiNÁS
1002OpatrněNÁS
1003SidSpojené království
1004TomAUS
1005KapilIND

Objednávky

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8502-01-201621002260

Pro cust_id 1001 existují tři objednávky, které existují v tabulce objednávek.

Pro cust_id 1003 není objednávka.

Pokud tedy v nadřazené tabulce máme konkrétní data (Řekněte id 1003), není nutné mít tato data v podřízené tabulce, ale naopak to není pravda.

V podřízené tabulce (tabulka objednávek) nemůžeme mít žádná data, která v nadřazené tabulce (zákazníci) neexistují.

Například nemůžeme vložit nový záznam říkat pro cust_id 1006 v tabulce Orders, protože cust_id 1006 v tabulce Customers neexistuje.

Níže jsou uvedeny příklady, které porušují referenční integritu tohoto vztahu:

  1. Vložení řádku do tabulky ORDERS, kde se Cust_ID neobjeví ve sloupci Cust_ID v tabulce CUSTOMERS.
  2. Odstranění řádku z tabulky CUSTOMERS, kde Cust_ID řádku, který má být odstraněn, je stále přítomno ve sloupci Cust_ID v tabulce ORDERS.

Když je konkrétní záznam odstraněn z hlavní tabulky, existují dva způsoby, jak zachovat integritu dat v podřízené tabulce. Pokud jsou dvě tabulky propojeny s cizím klíčem a jsou smazána určitá data v hlavní tabulce, pro které existuje i záznam v podřízené tabulce, máme nějaký mechanismus pro uložení integrity dat v podřízené tabulce.

  • Na kaskádě Odstranit : Toto odstraní záznam z podřízené tabulky, pokud je tato hodnota cizího klíče odstraněna z hlavní tabulky.
  • Na Smazat NULL: Tím nastavíte všechny hodnoty v tomto záznamu podřízené tabulky jako NULL, pro které je hodnota cizího klíče vymazána z hlavní tabulky.

Závěr - cizí klíč v SQL

Proto je vhodné použít cizí klíč v databázi, která má jeden až jeden nebo jeden až mnoho vztahů. Hlavní výhodou použití omezení cizího klíče je to, že zvyšuje výkon. Vývojáři mohou snadno identifikovat strukturu databáze. Můžeme také prozkoumat, jak dotaz vyhledá data.

Doporučené články

Toto je průvodce cizím klíčem v SQL. Zde diskutujeme pravidla a příklady cizího klíče v SQL se syntaxí. Další informace naleznete také v následujících článcích -

  1. Zobrazení SQL
  2. Typy připojení na serveru SQL
  3. Co je PL / SQL?
  4. Omezení serveru SQL
  5. Top 6 typů spojení v MySQL s příklady