Articles

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 vendorskan 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 vendorsuden 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 KEYbegræ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 til NULL 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 til NULL 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.