Articles

SQL Server FOREIGN KEY (Magyar)

összefoglaló: ebben a bemutatóban megtudhatja, hogyan kell használni az SQL Server foreign key constraint érvényesíteni közötti kapcsolat az adatok két táblában.

Bevezetés az SQL Server foreign key constraint

vegye figyelembe a következő vendor_groupsés vendors táblázatok:

minden szállító egy szállítói csoporthoz tartozik, és minden szállítói csoportnak lehet nulla vagy több szállítója. A vendor_groups és vendors táblák közötti összefüggés egy a sokhoz.,

avendors táblázat minden sorához mindig megtalálja a megfelelő sort avendor_groups táblázatban.

Az aktuális táblázatok beállításával azonban beilleszthet egy sort a vendorstáblázatba avendor_groups táblázat megfelelő sora nélkül. Hasonlóképpen törölhet egy sort avendor_groups táblázatban anélkül, hogy frissítené vagy törölné a megfelelő sorokat avendors táblázatban, amely árva sorokat eredményez avendors táblázatban.,

a vendor_groups és vendors táblázatokban található adatok közötti kapcsolat érvényesítéséhez idegen kulcsot kell létrehoznia a vendors táblázatban.

egy idegen kulcs egy oszlop vagy oszlopcsoport egy táblázatban, amely egyedileg azonosítja egy másik táblázat sorát (vagy ugyanazt a táblázatot önhivatkozás esetén).

idegen kulcs létrehozásához aFOREIGN KEY korlátozást használja.,

a következő kijelentések ejtik avendors táblázatot, és újra létrehozzák azt aFOREIGN KEY kényszer:

avendor_groups táblázat most a szülő tábla, amely az a táblázat, amelyre a külföldi kulcs megszorítás hivatkozásokat. Avendors táblát gyermektáblának nevezzük, amely az a táblázat, amelyre az idegen kulcskorlátot alkalmazzák.,

a fenti nyilatkozatban a következő záradék létrehoz egy FOREIGN KEY fk_group nevű korlátozást, amely összekapcsolja a group_id vendors táblázatot a group_id a vendor_groups TÁBLÁZAT:

SQL Server foreign key constraint syntax

a constraint létrehozásának általános szintaxisa a következő:

vizsgáljuk meg részletesen ezt a szintaxist.,

először adja meg aFOREIGN KEY constraint nevet a CONSTRAINT kulcsszó után. A kényszer neve nem kötelező, ezért lehetséges a FOREIGN KEY kényszer meghatározása az alábbiak szerint:

ebben az esetben az SQL Server automatikusan létrehoz egy nevet a FOREIGN KEY kényszer számára.

második, adja meg a vesszővel elválasztott idegen kulcsoszlopok listáját zárójelben a FOREIGN KEY kulcsszó után.,

harmadszor adja meg annak a szülőtáblának a nevét, amelyre az idegen kulcs hivatkozik, valamint a vesszővel elválasztott oszlopok listáját, amelyek kapcsolódnak a gyermektáblázat oszlopához.

SQL Server IDEGEN KULCS megszorítást példa

Első helyezzen néhány sort a vendor_groups táblázat:

Második, helyezzen be egy új eladó egy eladó csoport a vendors táblázat:

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

A nyilatkozat dolgozott, mint vártam.,

harmadszor, próbáljon be egy új szállítót, amelynek szállítói csoportja nem létezik a vendor_groups táblázatban:

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

SQL Server a következő hibát adta ki:

ebben a példában a kényszer, SQL Server elutasította a betétet, és hibát adott ki.

referenciális műveletek

az idegen kulcskorlátozás biztosítja a referenciális integritást. Ez azt jelenti, hogy csak akkor helyezhet be egy sort a gyermekasztalba, ha van egy megfelelő sor a szülői táblázatban.,

ezenkívül az idegen kulcskorlátozás lehetővé teszi a hivatkozási műveletek meghatározását, amikor a szülő táblázat sorát frissítik vagy törlik az alábbiak szerint:

The ON UPDATE and ON DELETE adja meg, hogy melyik művelet lesz végrehajtva, amikor a szülő táblázat egy sorát frissítik és törlik., A következő megengedett műveletek : NO ACTION, CASCADE, SET NULL vagy SET DEFAULT

Törlés intézkedések sor a szülő táblázat

Ha töröl egy vagy több sor a szülő tábla, beállíthatjuk, hogy az alábbi műveletek egyikét:

  • ON DELETE NO ACTION: az SQL Server felmerül egy hiba, rolls vissza a törlés műveletet a sorban a szülő táblázat.
  • ON DELETE CASCADE: az SQL Server törli azokat a sorokat a gyermek táblában, amelyek megfelelnek a szülő táblából törölt sornak.,
  • ON DELETE SET NULL: az SQL Server a gyermektáblázatban szereplő sorokat NULL értékre állítja, ha a szülőtáblázat megfelelő sorai törlődnek. Ennek a műveletnek a végrehajtásához az idegen kulcsoszlopoknak semmisnek kell lenniük.
  • ON DELETE SET DEFAULT SQL Server beállítja a sorok a gyermek tábla Az alapértelmezett értékeket, ha a megfelelő sorok a szülő tábla törlésre kerül. A művelet végrehajtásához az idegen kulcs oszlopoknak alapértelmezett definíciókkal kell rendelkezniük. Vegye figyelembe, hogy egy nullázható oszlop alapértelmezett értéke NULL, ha nincs megadva alapértelmezett érték.,

alapértelmezés szerint az SQL ServerON DELETE NO ACTION érvényes, ha nem határoz meg semmilyen műveletet.

sorok frissítési művelete a szülő táblázatban

Ha egy vagy több sort frissít a szülőtáblában, akkor a következő műveletek egyikét állíthatja be:

  • ON UPDATE NO ACTION: az SQL Server hibát vet fel, és visszaállítja a frissítési műveletet a szülő táblázat sorában.
  • ON UPDATE CASCADE: az SQL Server frissíti a megfelelő sorokat a gyermektáblázatban, amikor a szülőtáblázat sorai frissülnek.,
  • ON UPDATE SET NULL: SQL Server beállítja a sorok a gyermek tábla NULL ha a megfelelő sor a szülő táblázat frissül. Vegye figyelembe, hogy az idegen kulcsoszlopoknak érvénytelennek kell lenniük a művelet végrehajtásához.
  • ON UPDATE SET DEFAULT: SQL Server beállítja az alapértelmezett értékeket a sorok a gyermek tábla, amely a megfelelő sorok a szülő táblázat frissítve.