Shrnutí: v tomto tutoriálu, se dozvíte o PostgreSQL cizí klíč a jak přidat cizí klíče do tabulek pomocí cizí klíč omezení.
Úvod do PostgreSQL Omezení Cizího Klíče
cizí klíč je sloupec nebo skupina sloupců tabulky, které se odkazují na primární klíč jiné tabulky.
tabulka, která obsahuje cizí klíč, se nazývá odkazovací tabulka nebo dětská tabulka. A tabulka odkazovaná cizím klíčem se nazývá odkazovaná tabulka nebo nadřazená tabulka.,
tabulka může mít více cizích klíčů v závislosti na vztazích s jinými tabulkami.
v PostgreSQL definujete cizí klíč pomocí omezení cizího klíče. Omezení cizího klíče pomáhá udržovat referenční integritu dat mezi tabulkami dítěte a rodiče.
omezení cizího klíče označuje, že hodnoty ve sloupci nebo skupině sloupců v podřízené tabulce se rovnají hodnotám ve sloupci nebo skupině sloupců nadřazené tabulky.,
PostgreSQL cizí klíč omezení syntaxe
následující příklad ilustruje, cizí klíč omezení syntaxe:
V této syntaxi:
- za Prvé, zadejte název omezení cizího klíče po
CONSTRAINT
klíčové slovo. KlauzuleCONSTRAINT
je volitelná. Pokud to vynecháte, PostgreSQL přiřadí automaticky generované jméno. - druhý, zadejte jeden nebo více cizích klíčových sloupců v závorkách za
FOREIGN KEY
klíčová slova., - třetí, zadejte nadřazenou tabulku a sloupce nadřazeného klíče odkazované sloupci cizího klíče v klauzuli
.
- nakonec zadejte akce mazání a aktualizace v klauzulích
ON DELETE
aON UPDATE
.
akce mazání a aktualizace určují chování, když je primární klíč v nadřazené tabulce smazán a aktualizován. Protože primární klíč je zřídka aktualizován, ON UPDATE action
se v praxi často nepoužívá. Zaměříme se na akci ON DELETE
.,
PostgreSQL podporuje následující akce:
- NULL
- NASTAVIT jako VÝCHOZÍ
- OMEZENÍ
- AKCE
- KASKÁDY
PostgreSQL cizí klíč omezení příklady
následující příkazy vytvořit customers
contacts
tabulky:
V tomto příkladu customers
stůl je nadřazené tabulky a contacts
tabulka je podřízené tabulky.
každý zákazník má nula nebo mnoho kontaktů a každý kontakt patří nule nebo jednomu zákazníkovi.,
customer_id
sloupce v contacts
tabulka cizí klíč sloupec, který odkazuje na primární klíč sloupec se stejným názvem v customers
tabulka.
následující omezení cizího klíče fk_customer
contacts
tabulka definuje customer_id
jako cizí klíč:
Protože cizí klíč omezení nemá ON DELETE
ON UPDATE
akce, jsou výchozí NO ACTION
.,
ČINNOST
následující vloží data do customers
contacts
tabulky:
následující prohlášení odstraní id zákazníka 1 customers
tabulka:
Code language: SQL (Structured Query Language) (sql)
, Protože ON DELETE NO ACTION
, PostgreSQL otázky porušení omezení, protože odkazování na řádky id zákazníka 1 stále existují v contacts
tabulka:
RESTRICT
akce je podobný NO ACTION
., Rozdíl vzniká pouze tehdy, když budete definovat cizí klíč omezení jako DEFERRABLE
INITIALLY DEFERRED
nebo INITIALLY IMMEDIATE
režim. Více o tom budeme diskutovat v následujícím tutoriálu.
NULL
SET NULL
automaticky nastaví NULL
cizí klíč sloupce v odkazování na řádky z podřízené tabulky pokud odkazovaný řádků v nadřazené tabulka se zrušuje.,
následující příkazy drop vzorku tabulek a vytvořit je znovu, s cizí klíč, který používá SET NULL
akce ON DELETE
článek:
následující příkazy vložit data do customers
contacts
stoly:
Abyste viděli, jak SET NULL
funguje, pojďme odstranit zákazníka s id 1 z customers
tabulky:
Code language: SQL (Structured Query Language) (sql)
, Protože ON DELETE SET NULL
akce, odkazování řádky v contacts
tabulka nastavena na hodnotu NULL., Následující přehled zobrazuje data v contacts
tabulky:
Jak může být jasně vidět z výstupu, řádky, které mají customer_id
1 customer_id
nastaví NULL
KASKÁDY
ON DELETE CASCADE
automaticky odstraní všechny odkazování na řádky v podřízené tabulce, pokud odkazovaný řádků v nadřazené tabulka se zrušuje., V praxi je nejčastěji používanou volbou ON DELETE CASCADE
.
následující příkazy znovu vytvoří vzorové tabulky.,iv> změny CASCADE
:
následující prohlášení odstraní id zákazníka 1:
, Protože ON DELETE CASCADE
akce, všechny odkazování na řádky v contacts
tabulky jsou automaticky smazány:
NASTAVIT jako VÝCHOZÍ
ON DELETE SET DEFAULT
nastaví výchozí hodnotu pro cizí klíč sloupec odkazující na řádky v podřízené tabulce, pokud odkazovaný řádky z nadřazené tabulka se zrušuje.,nt do existující tabulky
přidat cizí klíč omezení do existující tabulka, můžete použít následující podobě ALTER TABLE:
Když jste se přidat cizí klíč omezení s ON DELETE CASCADE
možnost existující tabulky, budete muset následovat tyto kroky:
za Prvé, drop existující cizí klíč omezení:
Code language: SQL (Structured Query Language) (sql)
za Prvé, přidat nový cizí klíč omezení s ON DELETE CASCADE
akce:
V tomto kurzu jste se naučili o PostgreSQL cizí klíče a jak použít cizí klíč omezení vytvořit cizí klíče pro tabulku.,
- byl tento tutoriál užitečný ?
- YesNo
Napsat komentář