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 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.
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.
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โฆ
Steg 2) Ange tvรฅ kolumnnamn som 'Course_ID' och 'Course_Strength'. Hรถgerklicka pรฅ kolumnen 'Course_Id' och klicka sedan pรฅ Relationship.
Steg 3) Klicka pรฅ "Lรคgg till" i "Frรคmmande nyckelrelationer".
Steg 4) I 'Specifikation fรถr tabeller och kolumner' klickar du pรฅ ikonen '...'.
Steg 5) Vรคlj 'Primรคrnyckeltabell' som 'KURS' och den nya tabellen som skapas som 'Frรคmmande nyckeltabell' frรฅn rullgardinsmenyn.
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.
Steg 7) Klicka pรฅ Lรคgg till.
Steg 8) Ange tabellnamnet 'Course_Strength' och klicka pรฅ OK.
Resultat: Vi har skapat en fรถrรคlder-barn-relation 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.
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.
Resultat: Vi har stรคllt in en fรถrรคlder-barn-relation 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;
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');
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.

















