SQL Server FOREIGN KEY (Norsk)
Oppsummering: I denne opplæringen vil du lære hvordan du bruker SQL Server foreign key constraint å håndheve en kobling mellom data i to tabeller.
Introduksjon til SQL Server foreign key constraint
bør du Vurdere følgende vendor_groups
og vendors
tabeller:
Hver leverandør tilhører en leverandør gruppe og hver leverandør gruppe kan ha null eller flere leverandører. Forholdet mellom vendor_groups
og vendors
tabeller er en-til-mange.,
For hver rad i vendors
tabell, kan du alltid finne en tilsvarende raden i vendor_groups
tabell.
Imidlertid, med dagens bord oppsett, kan du sette inn en rad i vendors
bordet uten en tilsvarende rad i vendor_groups
tabell. På samme måte kan du også slette en rad i vendor_groups
bordet uten å oppdatere eller slette de tilsvarende radene i vendors
tabell som resulterer i foreldreløse rader i vendors
tabell.,
for Å håndheve kobling mellom data i vendor_groups
og vendors
tabeller, må du opprette en sekundærnøkkel i vendors
tabell.
En sekundærnøkkel er en kolonne eller en gruppe av kolonner i en tabell som unikt identifiserer en rad i en annen tabell (eller det samme bordet i tilfelle av selv-referanse).
for Å lage en sekundærnøkkel, kan du bruke FOREIGN KEY
tvang.,
følgende uttalelser slippe vendors
bordet og gjenskaper det med en FOREIGN KEY
begrensning:
vendor_groups
tabell nå kalles den overordnede tabellen er tabellen som foreign key constraint referanser. vendors
bordet kalles barnet tabellen er tabellen som foreign key constraint er brukt.,
I utsagnet ovenfor, følgende punkt skaper en FOREIGN KEY
begrensning som heter fk_group
som knytter group_id
i vendors
bordet til group_id
i vendor_groups
tabell:
SQL Server FOREIGN KEY constraint syntaks
Den generelle syntaksen for å lage en FOREIGN KEY
tvang er som følger:
La oss undersøke dette syntaks i detalj.,
Først, angi FOREIGN KEY
tvang navn etter CONSTRAINT
søkeord. Begrensningen navn er valgfritt, og det er derfor mulig å definere en FOREIGN KEY
begrensning som følger:
I dette tilfellet, SQL Server vil automatisk generere et navn for FOREIGN KEY
tvang.
Annet, spesifiser en kommaseparert liste med utenlandske nøkkel kolonner omsluttet av parenteser etter FOREIGN KEY
søkeord.,
Tredje, angi navnet på den overordnede tabellen som foreign key referanser og en kommaseparert liste med kolonner som har en link med kolonnen i barnet bordet.
SQL Server FOREIGN KEY constraint eksempel
Først, sett inn noen rader i vendor_groups
tabell:
Andre, sette inn en ny leverandør med en leverandør gruppe i vendors
tabell:
Code language: SQL (Structured Query Language) (sql)
uttalelsen fungerte som forventet.,
Tredje, kan du prøve å sette inn en ny leverandør som leverandør gruppe som ikke finnes i vendor_groups
tabell:
Code language: SQL (Structured Query Language) (sql)
SQL Server gitt følgende feil:
I dette eksempelet, på grunn av FOREIGN KEY
tvang, SQL-Serveren avviste sett og utstedt en feil.
Referensiell handlinger
The foreign key constraint sikrer referanseintegritet. Det betyr at du kan bare sette inn en rad i barnet bordet hvis det er en tilsvarende raden i den overordnede tabellen.,
Dessuten, foreign key constraint gir deg mulighet til å definere referensiell handlinger når raden i den overordnede tabellen er oppdatert eller slettet slik:
ON UPDATE
og ON DELETE
angir hvilken handling som skal utføres når en rad i den overordnede tabellen er oppdatert og slettet., Følgende er tillatt handlinger : NO ACTION
, CASCADE
, SET NULL
, og SET DEFAULT
Slett handlinger rader i den overordnede tabellen
Hvis du vil slette én eller flere rader i den overordnede tabellen, du kan angi en av følgende handlinger:
-
ON DELETE NO ACTION
: SQL Server reiser en feil og ruller tilbake slett action på rad i den overordnede tabellen. -
ON DELETE CASCADE
: SQL Server-slette rader i barnet tabell som er tilsvarende rad slettet fra den overordnede tabellen., -
ON DELETE SET NULL
: SQL Server setter rader i barnet tabell tilNULL
hvis de tilsvarende radene i den overordnede tabellen er slettet. For å utføre denne handlingen, foreign key kolonner må være nullable. -
ON DELETE SET DEFAULT
SQL Server setter rader i barnet tabell til standardverdiene hvis de tilsvarende radene i den overordnede tabellen er slettet. For å utføre denne handlingen, foreign key kolonner må ha standard definisjoner. Vær oppmerksom på at en nullable kolonne har en standardverdi påNULL
hvis ingen standard verdi er angitt.,
standard SQL Server gjelderON DELETE NO ACTION
hvis du ikke eksplisitt angi en hvilken som helst handling.
Oppdater virkningen av rader i den overordnede tabellen
Hvis du vil oppdatere en eller flere rader i den overordnede tabell, kan du angi en av følgende handlinger:
-
ON UPDATE NO ACTION
: SQL Server reiser en feil og ruller tilbake oppdateringen action på rad i den overordnede tabellen. -
ON UPDATE CASCADE
: SQL Server-oppdateringer tilsvarende radene i barnet bordet når radene i den overordnede tabellen er oppdatert., -
ON UPDATE SET NULL
: SQL Server setter rader i barnet tabell tilNULL
når den aktuelle raden i den overordnede tabellen er oppdatert. Merk at utenlandske nøkkel kolonner må være nullable for denne handlingen som skal utføres. -
ON UPDATE SET DEFAULT
: SQL Server, angir standard verdier for rader i barnet tabell som har tilsvarende radene i den overordnede tabellen oppdatert.