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 vendors
tá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ő sorokatNULL
é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ékeNULL
, 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áblaNULL
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.