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, abyNULL
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í hodnotuNULL
, 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, abyNULL
, 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.