Zusammenfassung: In diesem Tutorial erfahren Sie mehr über PostgreSQL-Fremdschlüssel und wie Sie Tabellen mithilfe von Fremdschlüsseleinschränkungen Fremdschlüssel hinzufügen.

Einführung in PostgreSQL Foreign Key-Einschränkung

ein Fremdschlüssel ist Eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die auf den Primärschlüssel einer anderen Tabelle.

Die Tabelle, die den Fremdschlüssel enthält, wird Referenzierungstabelle oder untergeordnete Tabelle genannt. Und die Tabelle, auf die der Fremdschlüssel verweist, wird als referenzierte Tabelle oder übergeordnete Tabelle bezeichnet.,

Eine Tabelle kann abhängig von ihren Beziehungen zu anderen Tabellen mehrere Fremdschlüssel haben.

In PostgreSQL definieren Sie einen Fremdschlüssel mithilfe der Fremdschlüsseleinschränkung. Die Fremdschlüsseleinschränkung trägt dazu bei, die referenzielle Integrität der Daten zwischen den untergeordneten und übergeordneten Tabellen aufrechtzuerhalten.

Eine Fremdschlüsseleinschränkung gibt an, dass Werte in einer Spalte oder einer Gruppe von Spalten in der untergeordneten Tabelle den Werten in einer Spalte oder einer Gruppe von Spalten der übergeordneten Tabelle entsprechen.,

PostgreSQL foreign key constraint syntax

Das Folgende veranschaulicht eine foreign key constraint Syntax:

In dieser Syntax:

  • Geben Sie zunächst den Namen für die foreign key constraint nach dem Schlüsselwort CONSTRAINT an. CONSTRAINT – Klausel ist optional. Wenn Sie es weglassen, weist PostgreSQL einen automatisch generierten Namen zu.
  • Geben Sie eine oder mehrere Fremdschlüsselspalten in Klammern nach den Schlüsselwörtern FOREIGN KEY an.,
  • Geben Sie drittens die übergeordnete Tabelle und die übergeordneten Schlüsselspalten an, auf die die Fremdschlüsselspalten in der Klausel verweisen.
  • Geben Sie abschließend die Lösch – und Aktualisierungsaktionen in den Klauseln ON DELETE und ON UPDATE an.

Die Delete-und Update-Aktionen bestimmen das Verhalten, wenn der Primärschlüssel in der übergeordneten Tabelle gelöscht und aktualisiert wird. Da der Primärschlüssel selten aktualisiert wird, wird die ON UPDATE action in der Praxis nicht häufig verwendet. Wir konzentrieren uns auf dieON DELETE Aktion.,

PostgreSQL unterstützt die folgenden Aktionen:

  • SET NULL
  • SET DEFAULT
  • RESTRICT
  • NO ACTION
  • CASCADE

PostgreSQL foreign key constraint examples

Die folgenden Anweisungen erstellen die customers und contacts Tabellen:

In diesem Beispiel ist die Tabelle customers die übergeordnete Tabelle und die Tabelle contacts die untergeordnete Tabelle.

Jeder Kunde hat null oder viele Kontakte und jeder Kontakt gehört Null oder einem Kunden.,

Diecustomer_id Spalte in dercontacts Tabelle ist die Fremdschlüsselspalte, die auf die gleichnamige Primärschlüsselspalte in dercustomers Tabelle verweist.

Die folgende Fremdschlüsseleinschränkung in der Tabelle contacts definiert die customer_id als Fremdschlüssel:

Da die Fremdschlüsseleinschränkung nicht die ON DELETE und ON UPDATE Aktion hat, sie standardmäßig NO ACTION.,

KEINE AKTION

Folgendes fügt Daten in die customers und contacts Tabellen ein:

Die folgende Anweisung löscht die Kunden-ID 1 aus der customers Tabelle:

Code language: SQL (Structured Query Language) (sql)

Aufgrund der ON DELETE NO ACTION, PostgreSQL gibt eine Einschränkungsverletzung aus, da die referenzierenden Zeilen der Kunden-ID 1 in der contacts – Tabelle noch vorhanden sind:

Die RESTRICT – Aktion ähnelt der NO ACTION., Der Unterschied entsteht nur, wenn Sie die Fremdschlüsseleinschränkung als DEFERRABLE mit einer INITIALLY DEFERRED oder INITIALLY IMMEDIATE mode definieren. Wir werden mehr darüber im folgenden Tutorial diskutieren.

SET NULL

Die SET NULL setzt automatisch NULL auf die Fremdschlüsselspalten in den referenzierenden Zeilen der untergeordneten Tabelle, wenn die referenzierten Zeilen in der übergeordneten Tabelle gelöscht werden.,

Die folgenden Anweisungen löschen die Beispieltabellen und erstellen sie mit dem Fremdschlüssel neu, der die SET NULL-Aktion in der ON DELETE – Klausel verwendet:

Die folgenden Anweisungen fügen Daten in die customers und contacts – Tabellen ein:

Um zu sehen, id=“f471fcdba6″> funktioniert, löschen wir den Kunden mit der ID 1 aus dercustomers – Tabelle:

Code language: SQL (Structured Query Language) (sql)

Aufgrund der ON DELETE SET NULL – Aktion sind die referenzierenden Zeilen in dercontacts – Tabelle auf NULL gesetzt., Die folgende Anweisung zeigt die Daten in der Tabelle contacts an:

Wie aus der Ausgabe hervorgeht, sind die Zeilen mit der customer_id 1 hat nun die customer_id setzt auf NULL

Die ON DELETE CASCADE löscht automatisch alle referenzierenden Zeilen in der untergeordneten Tabelle, wenn die referenzierten Zeilen in der übergeordneten Tabelle gelöscht werden., In der Praxis ist die ON DELETE CASCADE die am häufigsten verwendete Option.

Die folgenden Anweisungen erstellen die Beispieltabellen neu.,iv> Änderungen an CASCADE:

Die folgende Anweisung löscht die Kunden-ID 1:

Aufgrund der Aktion ON DELETE CASCADE werden alle referenzierenden Zeilen in der Tabelle contacts automatisch gelöscht:

SET DEFAULT

Die ON DELETE SET DEFAULT setzt den Standardwert auf die Fremdschlüsselspalte der referenzierenden Zeilen in der untergeordneten Tabelle, wenn die referenzierten Zeilen aus der übergeordneten Tabelle gelöscht werden.,nt zu einer vorhandenen Tabelle

Um der vorhandenen Tabelle eine Fremdschlüsseleinschränkung hinzuzufügen, verwenden Sie die folgende Form der Anweisung ALTER TABLE:

Wenn Sie einer vorhandenen Tabelle eine Fremdschlüsseleinschränkung mit ON DELETE CASCADE Option hinzufügen, müssen Sie die folgenden Schritte ausführen:

Löschen Sie zuerst vorhandene Fremdschlüsseleinschränkungen:

Code language: SQL (Structured Query Language) (sql)

Fügen Sie zuerst eine neue Fremdschlüsseleinschränkung zu einer vorhandenen Tabelle hinzu Schlüsseleinschränkung mit ON DELETE CASCADE Aktion:

In diesem Tutorial haben Sie mehr über PostgreSQL-Fremdschlüssel und die Verwendung der Fremdschlüsseleinschränkung zum Erstellen von Fremdschlüsseln für eine Tabelle erfahren.,

  • War dieses tutorial hilfreich ?
  • YesNo