Articles

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 til NULL 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 til NULL 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.