SQL Server FREMMED NØGLE
Resumé: I denne tutorial vil du lære, hvordan man bruger SQL Server-foreign key constraint til at håndhæve et link mellem data i de to tabeller.
Introduktion til SQL Server foreign key constraint
Overvej følgende: vendor_groups
og vendors
tabeller:
Hver leverandør hører til en leverandør gruppe og hver leverandør gruppe kan have nul eller flere leverandører. Forholdet mellem vendor_groups
og vendors
tabeller er en-til-mange.,
For hver række i tabellen vendors
kan du altid finde en tilsvarende række i tabellen vendor_groups
.
Med den aktuelle opsætning af tabeller kan du imidlertid indsætte en række i tabellen vendors
uden en tilsvarende række i tabellen vendor_groups
. På samme måde kan du også slette en række i vendor_groups
tabel uden at opdatere eller slette de tilsvarende rækker i vendors
tabel, der resulterer i, forældreløse rækker i vendors
tabel.,
for At håndhæve sammenhæng mellem data i vendor_groups
og vendors
tabeller, skal du oprette en fremmed nøgle i den vendors
tabel.
en fremmed nøgle er en kolonne eller en gruppe af kolonner i en tabel, der entydigt identificerer en række af en anden tabel (eller den samme tabel i tilfælde af selvreference).
for at oprette en fremmed nøgle bruger du FOREIGN KEY
begrænsning.,
følgende udsagn slip vendors
tabel, og genskabe det med en FOREIGN KEY
constraint:
vendor_groups
tabelposition > > nu kaldes den overordnede tabel, som er bordet, som foreign key constraint referencer. Tabellen vendors
kaldes barnetabellen, der er den tabel, som den udenlandske nøglebegrænsning anvendes til.,
I oversigten ovenfor, følgende klausul skaber en FOREIGN KEY
tvang opkaldt fk_group
links group_id
vendors
tabelposition > > til group_id
vendor_groups
tabel:
SQL Server FOREIGN KEY constraint syntaks
Den generelle syntaks for oprettelse af en FOREIGN KEY
tvang er som følger:
Lad os undersøge denne syntaks i detaljer.,
angiv førstFOREIGN KEY
begrænsningsnavn efterCONSTRAINT
nøgleord. Den tvang navn er valgfrit, og derfor er det muligt at definere en FOREIGN KEY
begrænsning, som følger:
I dette tilfælde, SQL Server til automatisk at generere et navn for FOREIGN KEY
tvang.
for det andet skal du angive en liste over kommaseparerede fremmede nøglekolonner omgivet af parenteser efterFOREIGN KEY
nøgleord.,
for det tredje skal du angive navnet på den overordnede tabel, som den fremmede nøgle refererer til, og en liste over kommaseparerede kolonner, der har et link til kolonnen i barnetabellen.
SQL Server FOREIGN KEY constraint eksempel
Først, skal du indsætte nogle rækker i vendor_groups
tabel:
for det Andet, skal du indsætte en ny leverandør med en leverandør gruppe i vendors
tabel:
Code language: SQL (Structured Query Language) (sql)
erklæringen fungerede som forventet.,
for det Tredje forsøger at indsætte en ny sælger, hvis sælger gruppe ikke findes i vendor_groups
tabel:
Code language: SQL (Structured Query Language) (sql)
SQL Server, der er udstedt følgende fejl:
I dette eksempel, på grund af FOREIGN KEY
tvang, SQL-Serveren afviste indsæt, og der er udstedt en fejl.
referentielle handlinger
den udenlandske nøglebegrænsning sikrer referentiel integritet. Det betyder, at du kun kan indsætte en række i barnebordet, hvis der er en tilsvarende række i forældrebordet.,
Udover, foreign key constraint giver dig mulighed for at angive referentiel handlinger, når den række, i den overordnede tabel er opdateret eller slettet som følger:
ON UPDATE
og ON DELETE
angiver, hvilken handling der vil udføre, når en række i den overordnede tabel, opdateres og slettes., Følgende er tilladt handlinger : NO ACTION
CASCADE
SET NULL
og SET DEFAULT
Slet handlinger af rækker i den overordnede tabel
Hvis du sletter en eller flere rækker i den overordnede tabel, du kan indstille en af følgende handlinger:
-
ON DELETE NO ACTION
: SQL Server rejser en fejl og ruller tilbage slette handling på række i den overordnede tabel. -
ON DELETE CASCADE
: s .l Server sletter rækkerne i barnetabellen, der svarer til rækken slettet fra overordnet tabel., -
ON DELETE SET NULL
: s .l Server indstiller rækkerne i barnetabellen tilNULL
hvis de tilsvarende rækker i overordnet tabel slettes. For at udføre denne handling skal kolonner med fremmed nøgle være ugyldige. -
ON DELETE SET DEFAULT
s .l Server indstiller rækkerne i barnetabellen til deres standardværdier, hvis de tilsvarende rækker i overordnet tabel slettes. For at udføre denne handling skal kolonner med fremmed nøgle have standarddefinitioner. Bemærk, at en nullbar kolonne har en standardværdi påNULL
hvis der ikke er angivet nogen standardværdi.,
som standard gælder s .l ServerON DELETE NO ACTION
hvis du ikke udtrykkeligt angiver nogen handling.
Opdateringen af rækker i den overordnede tabel
Hvis du opdatere en eller flere rækker i den overordnede tabel, kan du angive en af følgende handlinger:
-
ON UPDATE NO ACTION
: SQL Server rejser en fejl og ruller tilbage opdateringen af de træk i den overordnede tabel. -
ON UPDATE CASCADE
: s .l Server opdaterer de tilsvarende rækker i barnetabellen, når rækkerne i overordnet tabel opdateres., -
ON UPDATE SET NULL
: s .l Server indstiller rækkerne i barnetabellen tilNULL
når den tilsvarende række i overordnet tabel opdateres. Bemærk, at kolonner med fremmed nøgle skal være ugyldige, for at denne handling kan udføres. -
ON UPDATE SET DEFAULT
: s .l Server indstiller standardværdierne for rækkerne i barnetabellen, der har de tilsvarende rækker i overordnet tabel opdateret.