Articles

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 auf NULL, 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 von NULL 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.