Einführung in Fremdschlüssel in SQL
Fremdschlüssel ist eine Einschränkung in SQL. Es wird verwendet, um die beiden Tabellen in Beziehung zu setzen. Ein Fremdschlüssel in einer Tabelle verweist auf einen Primärschlüssel in einer anderen Tabelle. Mit einem Fremdschlüssel kann sichergestellt werden, dass die Zeile in einer Tabelle die entsprechenden Zeilen in einer anderen Tabelle enthält. Die referenzierte Tabelle wird als übergeordnete Tabelle und die Tabelle mit dem Fremdschlüssel als untergeordnete Tabelle bezeichnet. Diese Eltern-Kind-Beziehung erzwingt die Regel, die als referentielle Integrität bekannt ist. Die referenzielle Integrität ist eine Eigenschaft von Daten, aus der hervorgeht, dass alle Referenzen gültig sind.
Wenn Sie also 1-zu-viele oder viele-zu-viele Beziehungen in der Datenbank haben, sind Fremdschlüssel sehr nützlich. Es fungiert als Querverweis zwischen zwei Tabellen (parent_table und child_table), da es auf den Primärschlüssel einer anderen Tabelle verweist. Es wird also eine Verknüpfung zwischen parent_table und child_table hergestellt.
Syntax
Das Erstellen einer neuen Tabelle mit einem Fremdschlüssel erfordert die Berechtigung CREATE TABLE in der Datenbank
CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),
…
CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (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 ) ) );
- Child_Table ist der Tabellenname, den wir erstellen
- column_1, column_2 - die Spalten, die der Tabelle hinzugefügt werden sollen.
- F_key- Dies ist eine Fremdschlüsseleinschränkung.
- child_column1, child_column2… child_column_n- Dies ist der Name der child_Table-Spalten, die auf den Primärschlüssel in der übergeordneten Tabelle verweisen.
- Parent_Table- Dies ist der Name von parent_table. Der Primärschlüssel von parent_table wird in child_table referenziert
- ON DELETE- Dieser Parameter wird nach dem Löschen der übergeordneten Daten auf untergeordnete Daten angewendet. SET NULL, NO ACTION, CASCADE, SET DEFAULT sind einige der Werte dieses Parameters.
- ON UPDATE - Dies ist ein optionaler Parameter, der nach der Aktualisierung der übergeordneten Daten auf die untergeordneten Daten angewendet wird. SET NULL, NO ACTION, CASCADE, SET DEFAULT sind einige der Werte dieses Parameters.
- CASCADE- Wir können dies zusammen mit ON DELETE und ON UPDATE verwenden. Nach dem Löschen oder Aktualisieren der übergeordneten Daten Die untergeordneten Daten werden entweder gelöscht oder aktualisiert.
Das Erstellen eines Fremdschlüssels in einer vorhandenen Tabelle erfordert die ALTER-Berechtigung für die Tabelle.
ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
Regeln
- Fremdschlüssel gelten nicht für temporäre Tabellen.
- Die Fremdschlüsseleinschränkung muss nicht nur mit dem Primärschlüssel einer anderen Tabelle verknüpft werden, sondern kann auch mit der UNIQUE-Einschränkung einer anderen Tabelle verknüpft werden.
- FOREIGN KEY-Einschränkungen können auf eine andere Spalte in derselben Tabelle verweisen. Dies wird als Selbstreferenz bezeichnet.
- Fremdschlüsseleinschränkungen können sich auf die Tabellen in derselben Datenbank beziehen.
- Wir können auch NULL-Werte in die untergeordnete Tabelle einfügen.
- Wenn wir einen anderen Wert als NULL in die Fremdschlüsseleinschränkung einfügen, muss der Wert in der Spalte vorhanden sein, auf die verwiesen wird. Andernfalls ist eine Fehlermeldung aufgetreten.
- Der Wert der übergeordneten eindeutigen Schlüssel kann nicht geändert werden, wenn die Aktualisierungsregel RESTRICT lautet und mindestens eine abhängige Zeile vorhanden ist. Lautet die Aktualisierungsregel jedoch NO ACTION (Keine Aktion), können übergeordnete eindeutige Schlüssel aktualisiert werden, sofern jedes Kind zum Zeitpunkt der Aktualisierung über einen übergeordneten Schlüssel verfügt.
Beispiele
Angenommen, wir haben zwei Tabellen Kunden und Bestellungen. Customers-Tabelle enthält alle kundenbezogenen Daten und Orders-Tabelle enthält kundenbezogene Daten.
Kunden
Cust_id | Primärschlüssel |
Kundenname | |
Ort |
Aufträge
Auftragsnummer | Primärschlüssel |
Bestelldatum | |
Menge | |
Cust_id | Unbekannter Schlüssel |
Gesamtmenge |
Im obigen Beispiel ist die Spalte Cust_id in der Tabelle ORDERS ein Fremdschlüssel, der auf die Spalte Cust_id in der Tabelle CUSTOMERS verweist.
Angenommen, diese Tabellen haben die folgenden Werte
Kunden
1001 | Alex | UNS |
1002 | Carey | UNS |
1003 | Sid | Vereinigtes Königreich |
1004 | Tom | AUS |
1005 | Kapil | IND |
Aufträge
78 | 20-10-2018 | 5 | 1002 | 1200 |
79 | 12-10-2017 | 4 | 1001 | 800 |
80 | 20-11-2016 | 2 | 1005 | 369 |
81 | 09-10-2016 | 5 | 1002 | 258 |
82 | 19-08-2016 | 11 | 1004 | 1900 |
83 | 30-06-2016 | 45 | 1001 | 2300 |
84 | 16-02-2016 | 7 | 1001 | 890 |
85 | 02-01-2016 | 2 | 1002 | 260 |
Für cust_id 1001 sind drei Aufträge in der Auftragstabelle vorhanden.
Für cust_id 1003 gibt es keine Bestellung.
Wenn wir also bestimmte Daten (Sagen Sie ID 1003) in der übergeordneten Tabelle haben, ist es nicht erforderlich, diese Daten in der untergeordneten Tabelle zu haben, aber umgekehrt ist es nicht wahr.
Wir können keine Daten in der Child-Tabelle (Orders-Tabelle) haben, die nicht in der Parent-Tabelle (Customers) vorhanden sind.
Beispielsweise können wir keinen neuen Datensatz say für cust_id 1006 in die Orders-Tabelle einfügen, da cust_id 1006 in der Customers-Tabelle nicht vorhanden ist.
Im Folgenden sind die Beispiele aufgeführt, die die referenzielle Integrität dieser Beziehung verletzen:
- Einfügen einer Zeile in die Tabelle ORDERS, in der Cust_ID nicht in der Spalte Cust_ID in der Tabelle CUSTOMERS enthalten ist.
- Löschen einer Zeile aus der Tabelle CUSTOMERS, wobei die Cust_ID der zu löschenden Zeile in der Spalte Cust_ID der Tabelle ORDERS noch vorhanden ist.
Wenn ein bestimmter Datensatz aus der Haupttabelle gelöscht wird, gibt es zwei Möglichkeiten, die Integrität der Daten in der untergeordneten Tabelle zu gewährleisten. Wenn zwei Tabellen mit einem Fremdschlüssel verbunden sind und bestimmte Daten in der Haupttabelle gelöscht werden, für die der Datensatz auch in der untergeordneten Tabelle vorhanden ist, haben wir einen Mechanismus zum Speichern der Integrität von Daten in der untergeordneten Tabelle
- On Delete Cascade : Hiermit wird der Datensatz aus der untergeordneten Tabelle entfernt, wenn dieser Wert des Fremdschlüssels aus der Haupttabelle gelöscht wird.
- Beim Löschen von NULL: Hiermit werden alle Werte in diesem Datensatz der untergeordneten Tabelle als NULL festgelegt, für die der Wert des Fremdschlüssels aus der Haupttabelle gelöscht wird.
Fazit - Fremdschlüssel in SQL
Es ist daher ratsam, Fremdschlüssel in der Datenbank zu verwenden, die eine bis eine oder eine bis mehrere Beziehungen hat. Der Hauptvorteil der Verwendung von Fremdschlüsseleinschränkungen besteht darin, dass die Leistung verbessert wird. Entwickler können die Struktur der Datenbank leicht identifizieren. Wir können auch untersuchen, wie die Abfrage die Daten abrufen wird.
Empfohlene Artikel
Dies ist eine Anleitung zum Fremdschlüssel in SQL. Hier diskutieren wir die Regeln und Beispiele für Fremdschlüssel in SQL mit der Syntax. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren -
- SQL-Ansichten
- Arten von Joins in SQL Server
- Was ist PL / SQL?
- SQL Server-Einschränkungen
- Top 6 Arten von Joins in MySQL mit Beispielen