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. Klauzule CONSTRAINT 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 zaFOREIGN 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 a ON 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