Articles

SQL Server FOREIGN KEY (Čeština)

Shrnutí: V tomto tutoriálu, se dozvíte, jak používat SQL Server omezení cizího klíče prosadit propojení mezi daty ve dvou tabulkách.

Úvod do SQL Server omezení cizího klíče

Zvažte následující vendor_groups vendors tabulky:

Každý prodejce patří na dodavatele skupiny a každý prodejce skupina může mít nula nebo více dodavatelů. Vztah mezi tabulkami vendor_groups a vendors je one-to-many.,

pro každý řádek v tabulce vendors vždy najdete odpovídající řádek v tabulce vendor_groups.

při současném nastavení tabulek však můžete do tabulky vendors Vložit řádek bez odpovídajícího řádku v tabulce vendor_groups. Podobně, můžete také odstranit řádek v vendor_groups tabulce bez aktualizace nebo odstranění odpovídajících řádků v vendors tabulku, která výsledky v osamocené řádky v vendors tabulka.,

Chcete-li v tabulkáchvendor_groups avendors vytvořit cizí klíč v tabulcevendors.

cizí klíč je sloupec nebo skupina sloupců v jedné tabulce, která jednoznačně identifikuje řadu jiné tabulky (nebo stejnou tabulku v případě vlastní reference).

Chcete-li vytvořit cizí klíč, použijteFOREIGN KEY omezení.,

následující příkazy drop vendors tabulky a vytvořit znovu s FOREIGN KEY omezení:

vendor_groups tabulka se nyní nazývá mateřskou tabulku, která je tabulkou, na který cizí klíč omezení odkazy. Tabulka vendors se nazývá podřízená tabulka, která je tabulkou, na kterou je použito omezení cizího klíče.,

Ve výše uvedené prohlášení, následující ustanovení se vytvoří FOREIGN KEY omezení pojmenovaný fk_group odkazy group_id vendors tabulky group_id vendor_groups tabulka:

SQL Server omezení CIZÍHO KLÍČE syntaxe

obecná syntaxe pro vytvoření FOREIGN KEY omezení je následující:

podívejme se na tuto syntaxi v detailu.,

nejprve zadejte FOREIGN KEY název omezení za klíčovým slovem CONSTRAINT. Omezení jméno je volitelné proto je možné definovat FOREIGN KEY omezení takto:

V tomto případě, SQL Server automaticky vygeneruje název pro FOREIGN KEY omezení.

za sekundu zadejte seznam sloupců cizích klíčů oddělených čárkami uzavřených závorkami za klíčovým slovemFOREIGN KEY.,

za Třetí, zadejte název nadřazené tabulky do které se cizí klíč odkazuje a seznam oddělený čárkami sloupců, které má souvislost s sloupec v podřízené tabulce.

SQL Server omezení CIZÍHO KLÍČE příklad

za Prvé, vložit řádky do vendor_groups tabulky:

za Druhé, vložit nového dodavatele, se prodávající skupiny do vendors tabulky:

Code language: SQL (Structured Query Language) (sql)

prohlášení pracoval, jak se očekávalo.,

za Třetí, pokuste se vložit nového dodavatele, jehož dodavatele skupiny neexistuje v vendor_groups tabulky:

Code language: SQL (Structured Query Language) (sql)

SQL Server vydal následující chyby:

V tomto příkladu, protože FOREIGN KEY omezení, SQL Server odmítl vložit a vydal chyba.

referenční akce

omezení cizího klíče zajišťuje referenční integritu. To znamená, že do dětské tabulky můžete vložit řádek, pouze pokud je v rodičovské tabulce odpovídající řádek.,

Kromě toho, cizí klíč omezení umožňuje definovat referenční akce, když řádek v nadřazené tabulka, je aktualizován nebo odstraněn takto:

ON UPDATE ON DELETE určit, které akce se bude provádět, když řádek v nadřazené tabulka je aktualizována a odstraněny., Následující jsou povoleny akce : NO ACTION CASCADE SET NULL SET DEFAULT

Odstranit akcí řádků v nadřazené tabulky

Pokud odstraníte jeden nebo více řádků v nadřazené tabulka, můžete nastavit jednu z následujících akcí:

  • ON DELETE NO ACTION: SQL Server vyvolá chybu a vrátí odstranit akce na řádku v nadřazené tabulka.
  • ON DELETE CASCADE: SQL Server odstraní řádky v podřízené tabulce, které je odpovídající řádek odstraněn z nadřazené tabulka.,
  • ON DELETE SET NULL: SQL Server nastaví řádky v podřízené tabulce, aby NULL pokud odpovídajících řádků v nadřazené tabulka se zrušuje. K provedení této akce musí být sloupce cizích klíčů nulovatelné.
  • ON DELETE SET DEFAULT SQL Server nastaví řádky v podřízené tabulce na výchozí hodnoty, pokud jsou odstraněny odpovídající řádky v nadřazené tabulce. Pro provedení této akce musí mít sloupce cizích klíčů výchozí definice. Všimněte si, že nulovatelný sloupec má výchozí hodnotu NULL, pokud není zadána žádná výchozí hodnota.,

ve výchozím nastavení platí SQL Server ON DELETE NO ACTION pokud výslovně neuvádíte žádnou akci.

Aktualizace akce řádků v nadřazené tabulky

Pokud se vám aktualizovat jeden nebo více řádků v nadřazené tabulce, můžete nastavit jednu z následujících akcí:

  • ON UPDATE NO ACTION: SQL Server vyvolá chybu a vrátí aktualizace akce na řádku v nadřazené tabulka.
  • ON UPDATE CASCADE: SQL Server aktualizuje odpovídající řádky v podřízené tabulce, když jsou aktualizovány řádky v nadřazené tabulce.,
  • ON UPDATE SET NULL: SQL Server nastaví řádky v podřízené tabulce, aby NULL, pokud odpovídající řádek v nadřazené tabulka je aktualizován. Všimněte si, že sloupce cizích klíčů musí být pro provedení této akce nulovatelné.
  • ON UPDATE SET DEFAULT: SQL Server nastaví výchozí hodnoty pro řádky v podřízené tabulce, které nemají odpovídajících řádků v nadřazené tabulka aktualizovány.