SQL FOREIGN KEY: So erstellen Sie in SQL Server anhand eines Beispiels

Was ist ein Fremdschlรผssel?

A Unbekannter Schlรผssel Bietet eine Mรถglichkeit, die referenzielle Integritรคt innerhalb von SQL Server durchzusetzen. Vereinfacht ausgedrรผckt stellt der Fremdschlรผssel sicher, dass Werte in einer Tabelle in einer anderen Tabelle vorhanden sein mรผssen.

Regeln fรผr FOREIGN KEY

  • NULL ist im SQL-Fremdschlรผssel zulรคssig.
  • Die Tabelle, auf die verwiesen wird, wird als รผbergeordnete Tabelle bezeichnet
  • Die Tabelle mit dem Fremdschlรผssel wird in SQL als untergeordnete Tabelle bezeichnet.
  • Der SQL-Fremdschlรผssel in der untergeordneten Tabelle verweist auf den Primรคrschlรผssel in der รผbergeordneten Tabelle.
  • Diese Eltern-Kind-Beziehung erzwingt die Regel, die als โ€žReferential Integrity"

Das folgende Beispiel fรผr einen Fremdschlรผssel in SQL mit Diagramm fasst alle oben genannten Punkte fรผr FOREIGN KEY zusammen.

Regeln fรผr FOREIGN KEY in SQL
So funktioniert ein Fremdschlรผssel

So erstellen Sie einen Fremdschlรผssel in SQL

Wir kรถnnen ein erstellen Unbekannter Schlรผssel in SQL Server in 2 Mรถglichkeiten:

  1. SQL Server Management Studio
  2. T-SQL

SQL Server Management Studio

รœbergeordnete Tabelle: Angenommen, wir haben eine vorhandene รผbergeordnete Tabelle als โ€žKursโ€œ. Course_ID und Course_name sind zwei Spalten mit Course_Id als Primรคrschlรผssel.

Erstellen Sie einen Fremdschlรผssel in SQL

Kindertisch: Wir mรผssen die zweite Tabelle als untergeordnete Tabelle erstellen. โ€žCourse_IDโ€œ und โ€žCourse_Strengthโ€œ als zwei Spalten. Allerdings muss โ€žCourse_IDโ€œ ein Fremdschlรผssel sein.

Schritt 1) Klicken Sie mit der rechten Maustaste auf Tabellen > Neu > Tabelleโ€ฆ

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 2) Geben Sie zwei Spaltennamen ein: โ€žCourse_IDโ€œ und โ€žCourse_Strengthโ€œ. Klicken Sie mit der rechten Maustaste auf die Spalte โ€žCourse_Idโ€œ. Klicken Sie nun auf Beziehung.

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 3) In 'Fremdschlรผsselbeziehung,' Klicken 'Hinzufรผgen'

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 4) Klicken Sie unter โ€žTabellen- und Spaltenspezifikationโ€œ auf 'โ€ฆ' Symbol

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 5) Wรคhlen Sie โ€žPrimรคrschlรผsseltabelleโ€œ als โ€žKURSโ€œ und die neue Tabelle, die jetzt erstellt wird, als โ€žFremdschlรผsseltabelleโ€œ aus dem Dropdown-Menรผ aus.

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 6) โ€žPrimรคrschlรผsseltabelleโ€œ โ€“ Wรคhlen Sie die Spalte โ€žCourse_Idโ€œ als Spalte โ€žPrimรคrschlรผsseltabelleโ€œ aus.

โ€žFremdschlรผsseltabelleโ€œ โ€“ Wรคhlen Sie die Spalte โ€žCourse_Idโ€œ als Spalte โ€žFremdschlรผsseltabelleโ€œ aus. OK klicken.

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 7) Klicken Sie auf Hinzufรผgen.

Erstellen Sie einen Fremdschlรผssel in SQL

Schritt 8) Geben Sie als Tabellennamen โ€žCourse_Strengthโ€œ ein und klicken Sie auf OK.

Erstellen Sie einen Fremdschlรผssel in SQL

Ergebnis: Wir haben eine Eltern-Kind-Beziehung zwischen festgelegt 'Kurs' und 'Course_strength.'

Erstellen Sie einen Fremdschlรผssel in SQL

T-SQL: Erstellen Sie eine Parent-Child-Tabelle mit T-SQL

รœbergeordnete Tabelle: รœberdenken Sie es noch einmal: Wir haben eine vorhandene รผbergeordnete Tabelle mit dem Tabellennamen โ€žKursโ€œ.

Course_ID und Course_name sind zwei Spalten mit Course_Id als Primรคrschlรผssel.

Erstellen Sie mit T-SQL eine Parent-Child-Tabelle

Kindertisch: Wir mรผssen die zweite Tabelle als untergeordnete Tabelle mit dem Namen โ€žCourse_Strength_TSQLโ€œ erstellen.

โ€žCourse_IDโ€œ und โ€žCourse_Strengthโ€œ als zwei Spalten fรผr die untergeordnete Tabelle Course_Strength_TSQL. Allerdings muss โ€žCourse_IDโ€œ ein Fremdschlรผssel sein.

Nachfolgend finden Sie die Syntax zum Erstellen einer Tabelle mit FOREIGN KEY

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 } ] 
);

Hier ist eine Beschreibung der oben genannten Parameter:

  • childTable ist der Name der Tabelle, die erstellt werden soll.
  • Spalte_1, Spalte_2 โ€“ die Spalten, die der Tabelle hinzugefรผgt werden sollen.
  • fkey_name โ€“ der Name der zu erstellenden Fremdschlรผsseleinschrรคnkung.
  • child_column1, child_column2โ€ฆchild_column_n โ€“ der Name der chidTable-Spalten, um auf den Primรคrschlรผssel in parentTable zu verweisen.
  • parentTable โ€“ der Name der รผbergeordneten Tabelle, auf deren Schlรผssel in der untergeordneten Tabelle verwiesen werden soll.
  • parent_column1, parent_column2, โ€ฆ parent_column3 โ€“ die Spalten, die den Primรคrschlรผssel der รผbergeordneten Tabelle bilden.
  • AUF Lร–SCHEN. Ein optionaler Parameter. Es gibt an, was mit den untergeordneten Daten nach dem Lรถschen der รผbergeordneten Daten passiert. Einige der Werte fรผr diesen Parameter umfassen NO ACTION, SET NULL, CASCADE oder SET DEFAULT.
  • ON UPDATE โ€“ Ein optionaler Parameter. Es gibt an, was mit den untergeordneten Daten nach der Aktualisierung der รผbergeordneten Daten passiert. Einige der Werte fรผr diesen Parameter umfassen NO ACTION, SET NULL, CASCADE oder SET DEFAULT.
  • KEINE AKTION โ€“ wird zusammen mit ON DELETE und ON UPDATE verwendet. Das bedeutet, dass mit den untergeordneten Daten nach der Aktualisierung oder Lรถschung der รผbergeordneten Daten nichts passiert.
  • CASCADE โ€“ wird zusammen mit ON DELETE und ON UPDATE verwendet. Die untergeordneten Daten werden entweder gelรถscht oder aktualisiert, nachdem die รผbergeordneten Daten gelรถscht oder aktualisiert wurden.
  • SET NULL โ€“ wird zusammen mit ON DELETE und ON UPDATE verwendet. Das untergeordnete Element wird auf Null gesetzt, nachdem die รผbergeordneten Daten aktualisiert oder gelรถscht wurden.
  • SET DEFAULT โ€“ wird zusammen mit ON DELETE und ON UPDATE verwendet. Die untergeordneten Daten werden nach einer Aktualisierung oder Lรถschung der รผbergeordneten Daten auf Standardwerte gesetzt.

Sehen wir uns ein Beispiel fรผr einen Fremdschlรผssel in SQL an, um eine Tabelle mit einer Spalte als FREMDSCHLรœSSEL zu erstellen:

Beispiel fรผr einen Fremdschlรผssel in SQL

Abfrage:

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

Schritt 1) Fรผhren Sie die Abfrage aus, indem Sie auf โ€žAusfรผhrenโ€œ klicken.

Fremdschlรผssel in SQL

Ergebnis: Wir haben eine Eltern-Kind-Beziehung zwischen festgelegt 'Kurs' und 'Course_strength_TSQL.'

Fremdschlรผssel in SQL

Verwenden von ALTER TABLE

Jetzt lernen wir, wie man Fremdschlรผssel in SQL verwendet und Fremdschlรผssel in SQL Server mit der ALTER TABLE-Anweisung hinzufรผgt. Wir verwenden die unten angegebene Syntax:

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);

Hier ist eine Beschreibung der oben verwendeten Parameter:

  • childTable ist der Name der Tabelle, die erstellt werden soll.
  • Spalte_1, Spalte_2 โ€“ die Spalten, die der Tabelle hinzugefรผgt werden sollen.
  • fkey_name โ€“ der Name der zu erstellenden Fremdschlรผsseleinschrรคnkung.
  • child_column1, child_column2โ€ฆchild_column_n โ€“ der Name der chidTable-Spalten, um auf den Primรคrschlรผssel in parentTable zu verweisen.
  • parentTable โ€“ der Name der รผbergeordneten Tabelle, auf deren Schlรผssel in der untergeordneten Tabelle verwiesen werden soll.
  • parent_column1, parent_column2, โ€ฆ parent_column3 โ€“ die Spalten, die den Primรคrschlรผssel der รผbergeordneten Tabelle bilden.

Beispiel fรผr das Hinzufรผgen eines Fremdschlรผssels in der Tabelle รคndern:

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

Wir haben einen Fremdschlรผssel namens fkey_student_admission fรผr die Abteilungstabelle erstellt. Dieser Fremdschlรผssel verweist auf die Zulassungsspalte der Studententabelle.

Beispielabfrage FOREIGN KEY

Sehen wir uns zunรคchst die Daten unserer รผbergeordneten Tabelle an, COURSE.

Abfrage:

SELECT * from COURSE;

Beispielabfrage FOREIGN KEY

Fรผgen wir nun eine Zeile in die untergeordnete Tabelle ein: 'Course_strength_TSQL.'

Wir werden versuchen, zwei Arten von Zeilen einzufรผgen

  1. Der erste Typ, fรผr den Course_Id in der untergeordneten Tabelle in Course_Id der รผbergeordneten Tabelle vorhanden ist. dh Course_Id = 1 und 2
  2. Der zweite Typ, fรผr den Course_Id in der untergeordneten Tabelle nicht in der Course_Id der รผbergeordneten Tabelle vorhanden ist. dh Course_Id = 5

Abfrage:

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

Beispielabfrage FOREIGN KEY

Ergebnis: Lassen Sie uns gemeinsam die Abfrage ausfรผhren, um unsere รผbergeordnete und untergeordnete Tabelle anzuzeigen

Zeilen mit Course_ID 1 und 2 sind in der Course_strength-Tabelle vorhanden. Dagegen ist Course_ID 5 eine Ausnahme.

Beispielabfrage FOREIGN KEY

Zusammenfassung

  • Jeder Wert des Fremdschlรผssels muss Teil davon sein Primรคrschlรผssel anderer Tische.
  • Die MySQL Der Fremdschlรผssel kann auf eine andere Spalte in derselben Tabelle verweisen. Diese Referenz wird als Selbstreferenz bezeichnet.
  • SQL-Fremdschlรผsseleinschrรคnkung: wird verwendet, um die Verknรผpfungen zwischen Tabellen und ungรผltigen Daten zu sichern, die in die Fremdschlรผsselspalte eingefรผgt werden sollen.
  • Sie kรถnnen einen Fremdschlรผssel mit โ€žTabelle erstellenโ€œ, โ€žTabelle รคndernโ€œ oder erstellen SQL Server Management Studio.
  • Hier ist der Unterschied zwischen Primรคrschlรผssel und Fremdschlรผssel: Mehr Info

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: