SQL Server FOREIGN KEY: Hur man skapar med exempel

โšก Smart sammanfattning

En frรคmmande nyckel i SQL Server framtvingar referensintegritet genom att lรคnka en underordnad tabell till en รถverordnad tabell. Varje frรคmmande nyckelvรคrde mรฅste redan finnas i den refererade primรคrnyckeln i รถverordnad tabell.

  • ๐Ÿ”— Vad รคr en frรคmmande nyckel: En frรคmmande nyckel lรคnkar en underordnad tabell till en fรถrรคldertabell och upprรคtthรฅller referensintegritet mellan dem.
  • ๐Ÿ‘ช Fรถrรคlder och barn: Den refererade tabellen รคr fรถrรคldertabellen; tabellen som innehรฅller den frรคmmande nyckeln รคr undertabellen, som pekar pรฅ den รถverordnade primรคrnyckeln.
  • ๐Ÿ–ฑ๏ธ Tvรฅ skapandemetoder: Bรฅde relationer i SQL Server Management Studio och T-SQL CREATE TABLE โ€ฆ FOREIGN KEY โ€ฆ REFERENCES-klausulen definierar en frรคmmande nyckel.
  • โž• Lรคgg till i en befintlig tabell: ร„NDRING AV TABELL โ€ฆ Lร„GG TILL BEGRร„NSNING โ€ฆ UTLร„NDSK NYCKEL lรคgger till relationen till en tabell som redan finns.
  • ๐Ÿ”„ Referensรฅtgรคrder: ON DELETE- och ON UPDATE-klausulerna styr underrader med NO ACTION, CASCADE, SET NULL eller SET DEFAULT.
  • โœ… Integrity kontrollera: Att infoga en underrad vars nyckel inte har nรฅgon matchande รถverordnad rad avvisas, keeping uppgifterna รคr konsekventa.

SQL Server FOREIGN NYCKEL: Hur man skapar i SQL Server med ett exempel

Vad รคr en UTLร„NDSKNYCKEL?

En frรคmmande nyckel ger ett sรคtt att upprรคtthรฅlla referensintegritet inom SQL ServerEnkelt uttryckt sรคkerstรคller en frรคmmande nyckel att vรคrden i en tabell mรฅste finnas i en annan tabell.

Regler fรถr UTLร„NDSKNYCKEL

  • NULL รคr tillรฅtet i en SQL-frรคmmande nyckel.
  • Tabellen som refereras kallas fรถrรคldratabellen.
  • Tabellen med den frรคmmande nyckeln kallas undertabellen.
  • Den frรคmmande nyckeln i undertabellen refererar till primรคr nyckel i den รถverordnade tabellen.
  • Denna fรถrรคlder-barn-relation upprรคtthรฅller regeln som kallas "referensintegritet".

Diagrammet nedan sammanfattar alla ovanstรฅende punkter fรถr den frรคmmande nyckeln.

Diagram รถver en frรคmmande nyckel som lรคnkar en underordnad tabell till den รถverordnade tabellens primรคrnyckel

Hur man skapar FOREIGN KEY i SQL

Du kan skapa en frรคmmande nyckel i SQL Server pรฅ tvรฅ sรคtt:

SQL Server Management Studio

ร–verordnad tabell: Anta att vi har en befintlig รถverordnad tabell med namnet "Kurs". Kurs-ID och Kursnamn รคr tvรฅ kolumner, med Kurs-ID som primรคrnyckel.

ร–verordnad tabell Kurs med primรคrnyckeln Course_Id och kolumnerna Course_name

Underordnad tabell: Vi behรถver skapa den andra tabellen som en underordnad tabell. 'Course_ID' och 'Course_Strength' รคr dess tvรฅ kolumner. 'Course_ID' ska dock vara den frรคmmande nyckeln.

Steg 1) Hรถgerklicka pรฅ Tabeller > Nytt > Tabellโ€ฆ

Hรถgerklicka pรฅ Tabeller, sedan Ny och sedan Tabell i SQL Server Management Studio

Steg 2) Ange tvรฅ kolumnnamn som 'Course_ID' och 'Course_Strength'. Hรถgerklicka pรฅ kolumnen 'Course_Id' och klicka sedan pรฅ Relationship.

Nya underordnade tabellkolumner Course_ID och Course_Strength med Relationsmenyn

Steg 3) Klicka pรฅ "Lรคgg till" i "Frรคmmande nyckelrelationer".

Dialogrutan Frรคmmande nyckelrelationer med knappen Lรคgg till

Steg 4) I 'Specifikation fรถr tabeller och kolumner' klickar du pรฅ ikonen '...'.

Specifikationsfรคlt fรถr tabeller och kolumner med ellipsknappen

Steg 5) Vรคlj 'Primรคrnyckeltabell' som 'KURS' och den nya tabellen som skapas som 'Frรคmmande nyckeltabell' frรฅn rullgardinsmenyn.

Vรคlja COURSE som primรคrnyckeltabell i relationsdialogrutan

Steg 6) Fรถr 'Primรคrnyckeltabell', vรคlj kolumnen 'Course_Id' som primรคrnyckeltabellkolumn.

Fรถr tabellen 'Foreign Key Table' vรคljer du kolumnen 'Course_Id' som kolumn fรถr tabellen med frรคmmande nycklar. Klicka pรฅ OK.

Kartaping Course_Id som bรฅde primรคrnyckel- och frรคmmande nyckelkolumner

Steg 7) Klicka pรฅ Lรคgg till.

Klicka pรฅ Lรคgg till fรถr att bekrรคfta relationen mellan frรคmmande nyckeln

Steg 8) Ange tabellnamnet 'Course_Strength' och klicka pรฅ OK.

Namnge undertabellen Course_Strength och klicka pรฅ OK

Resultat: Vi har skapat en fรถrรคlder-barn-relation mellan 'Kurs' och 'Kursstyrka'.

Fรถrรคlder-barn-relation etablerad mellan Kurs och Kursstyrka

T-SQL: Skapa en รถverordnad-underordnad tabell med hjรคlp av T-SQL

ร–verordnad tabell: Tรคnk pรฅ att vi har en befintlig รถverordnad tabell med namnet "Kurs". Kurs-ID och Kursnamn รคr tvรฅ kolumner, med Kurs-ID som primรคrnyckel.

Befintlig รถverordnad tabell Kurs med Kurs-ID som primรคrnyckel

Underordnad tabell: Vi behรถver skapa den andra tabellen som underordnad tabell med namnet 'Course_Strength_TSQL'. 'Course_ID' och 'Course_Strength' รคr dess tvรฅ kolumner. 'Course_ID' ska dock vara den frรคmmande nyckeln.

Nedan fรถljer syntaxen fรถr att skapa en tabell med en UTLร„NDSK NYCKEL.

Syntax:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

Hรคr รคr en beskrivning av ovanstรฅende parametrar:

  • childTable รคr namnet pรฅ tabellen som ska skapas.
  • kolumn_1 och kolumn_2 รคr de kolumner som ska lรคggas till i tabellen.
  • fkey_name รคr namnet pรฅ den frรคmmande nyckelbegrรคnsning som ska skapas.
  • child_column1, child_column2 โ€ฆ child_column_n รคr de underordnade tabellkolumner som refererar till primรคrnyckeln i parentTable.
  • parentTable รคr namnet pรฅ den รถverordnade tabell vars nyckel refereras till i undertabellen.
  • parent_column1, parent_column2 โ€ฆ parent_column_n รคr kolumnerna som utgรถr primรคrnyckeln i รถverordnade tabellen.
  • ON DELETE รคr en valfri parameter som anger vad som hรคnder med underdata efter att รถverdata har raderats. Vรคrdena inkluderar NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • ON UPDATE รคr en valfri parameter som anger vad som hรคnder med underdata efter att รถverdata har uppdaterats. Vรคrdena inkluderar NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • INGEN ร…TGร„RD innebรคr att ingenting hรคnder med underdata efter att รถverdata har uppdaterats eller raderats.
  • CASCADE innebรคr att underdata raderas eller uppdateras efter att รถverordnade data har raderats eller uppdaterats.
  • SET NULL innebรคr att underdata sรคtts till null efter att รถverordnad data har uppdaterats eller raderats.
  • ANGE STANDARDvรคrde innebรคr att underdata stรคlls in pรฅ standardvรคrdet efter en uppdatering eller borttagning av รถverordnade data.

Lรฅt oss se ett exempel pรฅ en frรคmmande nyckel som skapar en tabell med en kolumn som en UTLร„NDSK NYCKEL med hjรคlp av en data typ fรถr varje kolumn.

Frรคmmande nyckel i SQL-exempel

Frรฅga:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Steg 1) Kรถr frรฅgan genom att klicka pรฅ Kรถr.

Kรถra CREATE TABLE-frรฅgan som definierar den frรคmmande nyckeln Course_ID

Resultat: Vi har stรคllt in en fรถrรคlder-barn-relation mellan 'Course' och 'Course_Strength_TSQL'.

Fรถrรคlder-barn-relation skapad mellan Course och Course_Strength_TSQL

Anvรคnder ALTER TABLE

Nu ska vi lรคra oss hur man lรคgger till en frรคmmande nyckel i SQL Server till en tabell som redan finns med hjรคlp av ALTER TABLE-satsen. Vi kommer att anvรคnda syntaxen nedan:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Hรคr รคr en beskrivning av parametrarna som anvรคnds ovan:

  • childTable รคr namnet pรฅ tabellen som ska skapas.
  • kolumn_1 och kolumn_2 รคr de kolumner som ska lรคggas till i tabellen.
  • fkey_name รคr namnet pรฅ den frรคmmande nyckelbegrรคnsning som ska skapas.
  • child_column1, child_column2 โ€ฆ child_column_n รคr de underordnade tabellkolumner som refererar till primรคrnyckeln i parentTable.
  • parentTable รคr namnet pรฅ den รถverordnade tabell vars nyckel refereras till i undertabellen.
  • parent_column1, parent_column2 โ€ฆ parent_column_n รคr kolumnerna som utgรถr primรคrnyckeln i รถverordnade tabellen.

ALTER TABLE exempel pรฅ att lรคgga till en frรคmmande nyckel:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Vi har skapat en frรคmmande nyckel som heter fkey_student_admission pรฅ institutionstabellen. Denna frรคmmande nyckel refererar till antagningskolumnen i elevtabellen.

Exempelfrรฅga UTLร„NDSK NYCKEL

Lรฅt oss fรถrst titta pรฅ vรฅra รถverordnade tabelldata, COURSE.

Frรฅga:

SELECT * from COURSE;

SELECT-resultat som visar den รถverordnade tabellen COURSE-data

Nu ska vi infoga nรฅgra rader i undertabellen 'Course_Strength_TSQL'. Vi ska fรถrsรถka infoga tvรฅ typer av rader:

  • Den fรถrsta typen, fรถr vilken Course_Id i undertabellen finns i Course_Id i รถverordnade tabellen, det vill sรคga Course_Id = 1 och 2.
  • Den andra typen, fรถr vilken Course_Id i undertabellen inte finns i Course_Id i รถverordnade tabellen, det vill sรคga Course_Id = 5.

Frรฅga:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Infogar underrader, inklusive Course_ID 5 som inte har nรฅgon matchande fรถrรคlder

Resultat: Lรฅt oss kรถra frรฅgan tillsammans fรถr att se vรฅra รถverordnade och underordnade tabeller.

Raderna med Course_ID 1 och 2 finns i tabellen Course_Strength. Course_ID 5 รคr dock ett undantag, eftersom det inte finns nรฅgon matchande rad i den รถverordnade tabellen.

ร–verordnade och underordnade tabeller jรคmfรถrdes; Course_ID 5 bryter mot referensintegritet

Vanliga frรฅgor

En primรคrnyckel identifierar unikt varje rad i sin egen tabell och kan inte vara NULL. En frรคmmande nyckel refererar till den primรคrnyckeln frรฅn en annan tabell fรถr att upprรคtthรฅlla referensintegritet. primรคrnyckel kontra frรคmmande nyckel Jรคmfรถrelse fรถrklarar varje skillnad.

Ja. En frรคmmande nyckel kan referera till antingen en primรคrnyckel eller vilken kolumn som helst som har en UNIK begrรคnsning i den รถverordnade tabellen. Den refererade kolumnen mรฅste innehรฅlla unika vรคrden sรฅ att varje underordnad rad matchar exakt en รถverordnad rad.

VID BORTTAGNING tar CASCADE automatiskt bort matchande underraderna nรคr deras รถverordnade rad tas bort, keeping tabellerna รคr konsekventa. Alternativen รคr SET NULL, vilket rensar den underordnade frรคmmande nyckeln, och NO ACTION, vilket blockerar borttagningen.

Ja. En sjรคlvrefererande frรคmmande nyckel pekar pรฅ en primรคrnyckel i samma tabell, som modellerar hierarkier, till exempel en anstรคllds rad som refererar till sin chef. Fรถr sjรคlvreferenser rekommenderar SQL Server ON DELETE NO ACTION fรถr att undvika kaskadcykler.

Ja, sรฅvida inte kolumnen deklareras som NOT NULL. En NULL-frรคmmande nyckel innebรคr att underraden รคnnu inte รคr lรคnkad till nรฅgon รถverordnad rad, och SQL Server hoppar รถver referenskontrollen fรถr det NULL-vรคrdet.

Kรถr ALTER TABLE child_table DROP CONSTRAINT fkey_name. Du mรฅste ange begrรคnsningsnamnet, vilket du hittar i sys.foreign_keys. Dropping Den frรคmmande nyckeln tar bort relationen men lรคmnar bรฅde tabellerna och deras data ofรถrรคndrade.

Ja. GitHub Copilot kan skriva FOREIGN KEY-begrรคnsningar inuti CREATE TABLE- eller ALTER TABLE-satser frรฅn en naturligt sprรฅkprompt och fรถreslรฅ den รถverordnade tabellen och den refererade kolumnen. Granska alltid nycklarna, referensรฅtgรคrderna och datatyperna innan du kรถr skriptet.

AI- och maskininlรคrningsverktyg granskar exempeldata och frรฅgemรถnster fรถr att fรถreslรฅ vilka kolumner som ska bli frรคmmande nycklar, upptรคcka saknade eller รถverblivna relationer och rekommendera lรคmpliga รฅtgรคrder vid borttagning. Utvecklaren granskar varje fรถrslag innan det tillรคmpas.

Sammanfatta detta inlรคgg med: