SQL Server FOREIGN KEY (Deutsch)
Zusammenfassung: In diesem tutorial lernen Sie, wie Sie mithilfe der SQL Server foreign key-Einschränkung zu erzwingen, eine Verknüpfung zwischen den Daten in zwei Tabellen.
Einführung in die SQL Server-Fremdschlüsseleinschränkung
Betrachten Sie die folgendenvendor_groups
undvendors
Tabellen:
Jeder Anbieter gehört zu einer Anbietergruppe und jede Anbietergruppe kann null oder mehr Anbieter haben. Die Beziehung zwischen den Tabellen vendor_groups
und vendors
ist eins zu viele.,
Für jede Zeile in der Tabelle vendors
finden Sie immer eine entsprechende Zeile in der Tabelle vendor_groups
.
Mit dem aktuellen Tabellen-Setup können Sie jedoch eine Zeile in die Tabelle vendors
ohne eine entsprechende Zeile in der Tabelle vendor_groups
einfügen. Ebenso können Sie auch eine Zeile in der Tabelle vendor_groups
löschen, ohne die entsprechenden Zeilen in der Tabelle vendors
zu aktualisieren oder zu löschen verwaiste Zeilen in der Tabelle vendors
.,
Um die Verknüpfung zwischen Daten in den Tabellen vendor_groups
und vendors
zu erzwingen, müssen Sie einen Fremdschlüssel in der Tabelle vendors
einrichten.
Ein Fremdschlüssel ist eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die eine Zeile einer anderen Tabelle (oder dieselbe Tabelle bei Selbstreferenz) eindeutig identifiziert.
Um einen Fremdschlüssel zu erstellen, verwenden Sie dieFOREIGN KEY
– Einschränkung.,
Die folgenden Anweisungen löschen die vendors
– Tabelle und erstellen sie mit einer FOREIGN KEY
– Einschränkung neu:
Die vendor_groups
– Tabelle wird jetzt als übergeordnete Tabelle bezeichnet, auf die die Fremdschlüsseleinschränkung verweist. Dievendors
– Tabelle wird als untergeordnete Tabelle bezeichnet, auf die die Fremdschlüsseleinschränkung angewendet wird.,
In der obigen Anweisung erstellt die folgende Klausel eine FOREIGN KEY
– Einschränkung mit dem Namen , die die group_id
in der vendors
– Tabelle mit der group_id
in der vendor_groups
table:
SQL Server FOREIGN KEY constraint syntax
Die allgemeine Syntax zum Erstellen einer FOREIGN KEY
constraint lautet wie folgt:
Lassen Sie uns diese Syntax im Detail untersuchen.,
Geben Sie zunächst den FOREIGN KEY
– Einschränkungsnamen nach dem Schlüsselwort CONSTRAINT
an. Der Einschränkungsname ist optional, daher ist es möglich, eine FOREIGN KEY
– Einschränkung wie folgt zu definieren:
In diesem Fall generiert SQL Server automatisch einen Namen für die FOREIGN KEY
– Einschränkung.
Geben Sie zweitens eine Liste kommagetrennter Fremdschlüsselspalten an, die durch Klammern nach dem Schlüsselwort FOREIGN KEY
eingeschlossen sind.,
Geben Sie drittens den Namen der übergeordneten Tabelle an, auf die der Fremdschlüssel verweist, und eine Liste von durch Kommas getrennten Spalten, die mit der Spalte in der untergeordneten Tabelle verknüpft sind.
SQL Server FOREIGN KEY constraint example
Fügen Sie zunächst einige Zeilen in die vendor_groups
– Tabelle ein:
Zweitens fügen Sie einen neuen Anbieter mit einer Anbietergruppe in die vendors
– Tabelle ein:
Code language: SQL (Structured Query Language) (sql)
Die Anweisung funktionierte wie erwartet.,
Drittens versuchen Sie, einen neuen Anbieter einzufügen, dessen Anbietergruppe in der Tabelle vendor_groups
nicht vorhanden ist:
Code language: SQL (Structured Query Language) (sql)
SQL Server hat den folgenden Fehler ausgegeben:
In diesem Beispiel hat SQL Server aufgrund der FOREIGN KEY
– Einschränkung die Einfügung abgelehnt und einen Fehler ausgegeben.
Referenzielle Aktionen
Die Fremdschlüsseleinschränkung gewährleistet die referenzielle Integrität. Dies bedeutet, dass Sie nur dann eine Zeile in die untergeordnete Tabelle einfügen können, wenn die übergeordnete Tabelle eine entsprechende Zeile enthält.,
Außerdem können Sie mit der Fremdschlüsseleinschränkung die referenziellen Aktionen definieren, wenn die Zeile in der übergeordneten Tabelle wie folgt aktualisiert oder gelöscht wird:
Die ON UPDATE
und ON DELETE
geben an, welche Aktion ausgeführt wird, wenn eine Zeile in der übergeordneten Tabelle aktualisiert und gelöscht wird., Es sind folgende Aktionen zulässig : NO ACTION
, CASCADE
, SET NULL
und
Aktionen von Zeilen in der übergeordneten Tabelle löschen
Wenn Sie eine oder mehrere Zeilen in der übergeordneten Tabelle löschen, können Sie eine der folgenden Aktionen festlegen:
-
ON DELETE NO ACTION
: SQL Server löst einen Fehler aus und rollt die Löschaktion für die Zeile in der übergeordneten Tabelle zurück. -
ON DELETE CASCADE
: SQL Server löscht die Zeilen in der untergeordneten Tabelle, die der aus der übergeordneten Tabelle gelöschten Zeile entsprechen., -
ON DELETE SET NULL
: SQL Server setzt die Zeilen in der untergeordneten Tabelle aufNULL
, wenn die entsprechenden Zeilen in der übergeordneten Tabelle gelöscht werden. Um diese Aktion auszuführen, müssen die Fremdschlüsselspalten nullfähig sein. -
ON DELETE SET DEFAULT
SQL Server setzt die Zeilen in der untergeordneten Tabelle auf ihre Standardwerte, wenn die entsprechenden Zeilen in der übergeordneten Tabelle gelöscht werden. Um diese Aktion auszuführen, müssen die Fremdschlüsselspalten Standarddefinitionen haben. Beachten Sie, dass eine nullable Spalte einen Standardwert vonNULL
wenn kein Standardwert angegeben ist.,
Standardmäßig wendet SQL ServerON DELETE NO ACTION
an, wenn Sie keine Aktion explizit angeben.
Aktualisierungsaktion von Zeilen in der übergeordneten Tabelle
Wenn Sie eine oder mehrere Zeilen in der übergeordneten Tabelle aktualisieren, können Sie eine der folgenden Aktionen festlegen:
-
ON UPDATE NO ACTION
: SQL Server löst einen Fehler aus und rollt die Aktualisierungsaktion für die Zeile in der übergeordneten Tabelle zurück. -
ON UPDATE CASCADE
: SQL Server aktualisiert die entsprechenden Zeilen in der untergeordneten Tabelle, wenn die Zeilen in der übergeordneten Tabelle aktualisiert werden., - : SQL Server setzt die Zeilen in der untergeordneten Tabelle auf
NULL
wenn die entsprechende Zeile in der übergeordneten Tabelle aktualisiert wird. Beachten Sie, dass die Fremdschlüsselspalten nullfähig sein müssen, damit diese Aktion ausgeführt werden kann. -
ON UPDATE SET DEFAULT
: SQL Server legt die Standardwerte für die Zeilen in der untergeordneten Tabelle fest, für die die entsprechenden Zeilen in der übergeordneten Tabelle aktualisiert wurden.