SQL Server FOREIGN KEY: Hvordan opprette med eksempel
โก Smart oppsummering
En fremmednรธkkel i SQL Server hรฅndhever referanseintegritet ved รฅ koble en underordnet tabell til en overordnet tabell. Hver fremmednรธkkelverdi mรฅ allerede finnes i den refererte primรฆrnรธkkelen til den overordnede tabellen.

Hva er en utenlandsnรธkkel?
En fremmednรธkkel gir en mรฅte รฅ hรฅndheve referanseintegritet pรฅ SQL ServerEnkelt sagt sikrer en fremmednรธkkel at verdier i รฉn tabell mรฅ vรฆre tilstede i en annen tabell.
Regler for UTENLANDSK NรKKEL
- NULL er tillatt i en SQL-fremmednรธkkel.
- Tabellen det refereres til kalles overordnet tabell.
- Tabellen med fremmednรธkkelen kalles barnetabellen.
- Fremmednรธkkelen i barnetabellen refererer til primรฆrnรธkkel i den overordnede tabellen.
- Dette foreldre-barn-forholdet hรฅndhever regelen kjent som ยซreferanseintegritetยป.
Diagrammet nedenfor oppsummerer alle punktene ovenfor for fremmednรธkkelen.
Hvordan lage utenlandsk nรธkkel i SQL
Du kan opprette en fremmednรธkkel i SQL Server pรฅ to mรฅter:
SQL Server Management Studio
Overordnet tabell: La oss si at vi har en eksisterende overordnet tabell med navnet ยซKursยป. Kurs-ID og Kursnavn er to kolonner, med Kurs-ID som primรฆrnรธkkel.
Undertabell: Vi mรฅ opprette den andre tabellen som en undertabell. 'Course_ID' og 'Course_Strength' er de to kolonnene. 'Course_ID' skal imidlertid vรฆre fremmednรธkkelen.
Trinn 1) Hรธyreklikk pรฅ Tabeller > Ny > Tabellโฆ
Trinn 2) Skriv inn to kolonnenavn som ยซCourse_IDยป og ยซCourse_Strengthยป. Hรธyreklikk pรฅ ยซCourse_Idยป-kolonnen, og klikk deretter pรฅ Relasjon.
Trinn 3) Klikk pรฅ ยซLegg tilยป i ยซForeign Key Relationsยป.
Trinn 4) Klikk pรฅ ikonet ยซโฆยป i ยซTabell- og kolonnespesifikasjonยป.
Trinn 5) Velg ยซPrimรฆrnรธkkeltabellยป som ยซKURSยป og den nye tabellen som opprettes som ยซFremmednรธkkeltabellยป fra rullegardinmenyen.
Trinn 6) For ยซPrimรฆrnรธkkeltabellยป velger du kolonnen ยซKurs-IDยป som kolonne for primรฆrnรธkkeltabellen.
For ยซTabell med fremmednรธklerยป velger du kolonnen ยซKurs-IDยป som kolonne for tabellen med fremmednรธkler. Klikk pรฅ OK.
Trinn 7) Klikk pรฅ Legg til.
Trinn 8) Gi tabellen navnet ยซCourse_Strengthยป og klikk OK.
Resultat: Vi har satt en foreldre-barn-relasjon mellom 'Kurs' og 'Kursstyrke'.
T-SQL: Opprett en overordnet-underordnet tabell ved hjelp av T-SQL
Overordnet tabell: Tenk pรฅ at vi har en eksisterende overordnet tabell med navnet ยซKursยป. Kurs-ID og Kursnavn er to kolonner, med Kurs-ID som primรฆrnรธkkel.
Undertabell: Vi mรฅ opprette den andre tabellen som undertabellen med navnet ยซCourse_Strength_TSQLยป. ยซCourse_IDยป og ยซCourse_Strengthยป er de to kolonnene. Imidlertid skal ยซCourse_IDยป vรฆre fremmednรธkkelen.
Nedenfor er syntaksen til lage en tabell med en UTENLANDSK NรKKEL.
Syntaks:
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 } ] );
Her er en beskrivelse av parameterne ovenfor:
- childTable er navnet pรฅ tabellen som skal opprettes.
- kolonne_1 og kolonne_2 er kolonnene som skal legges til i tabellen.
- fkey_name er navnet pรฅ fremmednรธkkelbegrensningen som skal opprettes.
- barnekolonne1, barnekolonne2 โฆ barnekolonne_n er underordnede tabellkolonner som refererer til primรฆrnรธkkelen i overordnet tabell.
- parentTable er navnet pรฅ den overordnede tabellen hvis nรธkkel det refereres til i barnetabellen.
- parent_column1, parent_column2 โฆ parent_column_n er kolonnene som utgjรธr primรฆrnรธkkelen til den overordnede tabellen.
- ON DELETE er en valgfri parameter som angir hva som skjer med underdataene etter at overdataene er slettet. Verdier inkluderer NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
- ON UPDATE er en valgfri parameter som angir hva som skjer med underdataene etter at overdataene er oppdatert. Verdier inkluderer NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
- INGEN HANDLING betyr at ingenting skjer med underdataene etter at overordnede data er oppdatert eller slettet.
- CASCADE betyr at underdataene slettes eller oppdateres etter at overordnede data er slettet eller oppdatert.
- SET NULL betyr at underdataene settes til null etter at overordnede data er oppdatert eller slettet.
- ANGI STANDARD betyr at underdataene settes til standardverdien etter en oppdatering eller sletting av de overordnede dataene.
La oss se pรฅ et eksempel pรฅ en fremmednรธkkel som oppretter en tabell med รฉn kolonne som en fremmednรธkkel, ved hjelp av en data-type for hver kolonne.
Fremmednรธkkel i SQL-eksempel
Spรธrsmรฅl:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Trinn 1) Kjรธr spรธrringen ved รฅ klikke pรฅ Utfรธr.
Resultat: Vi har satt en foreldre-barn-relasjon mellom 'Kurs' og 'Course_Strength_TSQL'.
Bruker ALTER TABLE
Nรฅ skal vi lรฆre hvordan man legger til en fremmednรธkkel i SQL Server til en tabell som allerede finnes ved hjelp av ALTER TABLE-setningen. Vi bruker syntaksen nedenfor:
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);
Her er en beskrivelse av parameterne som er brukt ovenfor:
- childTable er navnet pรฅ tabellen som skal opprettes.
- kolonne_1 og kolonne_2 er kolonnene som skal legges til i tabellen.
- fkey_name er navnet pรฅ fremmednรธkkelbegrensningen som skal opprettes.
- barnekolonne1, barnekolonne2 โฆ barnekolonne_n er underordnede tabellkolonner som refererer til primรฆrnรธkkelen i overordnet tabell.
- parentTable er navnet pรฅ den overordnede tabellen hvis nรธkkel det refereres til i barnetabellen.
- parent_column1, parent_column2 โฆ parent_column_n er kolonnene som utgjรธr primรฆrnรธkkelen til den overordnede tabellen.
Eksempel pรฅ รฅ legge til fremmednรธkkel i ALTER TABLE:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Vi har laget en fremmednรธkkel som heter fkey_student_admission pรฅ avdelingstabellen. Denne fremmednรธkkelen refererer til opptakskolonnen i elevtabellen.
Eksempel pรฅ forespรธrsel UTENLANDSK NรKKEL
La oss fรธrst se pรฅ dataene i overordnet tabell, COURSE.
Spรธrsmรฅl:
SELECT * from COURSE;
La oss nรฅ sette inn noen rader i barnetabellen ยซCourse_Strength_TSQLยป. Vi skal prรธve รฅ sette inn to typer rader:
- Den fรธrste typen, der Course_Id i barnetabellen finnes i Course_Id i foreldretabellen, det vil si at Course_Id = 1 og 2.
- Den andre typen, der Course_Id i barnetabellen ikke finnes i Course_Id i foreldretabellen, det vil si at Course_Id = 5.
Spรธrsmรฅl:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Resultat: La oss kjรธre spรธrringen sammen for รฅ se foreldre- og underordnetabellene vรฅre.
Radene med Course_ID 1 og 2 finnes i Course_Strength-tabellen. Course_ID 5 er imidlertid et unntak, fordi den ikke har noen samsvarende rad i den overordnede tabellen.

















