basics mysql foreign key constraint with examples
In diesem Tutorial werden die Grundlagen der MySQL FOREIGN KEY-Einschränkung erläutert, z. B. die Syntax, das Hinzufügen, Deklarieren, Löschen und Ändern anhand von Beispielen:
In sehr einfachen Worten wird der FOREIGN KEY verwendet, um zwei oder mehr Tabellen in MySQL zu verknüpfen.
MySQL-Tabellen müssen verbunden werden, um verschiedene Datentypen zu unterschiedlichen Zeitpunkten abfragen und aktualisieren zu können. Daher ist es unbedingt erforderlich, einen Verknüpfungspunkt zwischen zwei Tabellen zu haben.
In diesem Tutorial werden wir verschiedene Verwendungen von Fremdschlüsseln diskutieren und wie sie deklariert und geändert werden können und welche Einschränkungen sie für die gesamte Tabellenstruktur haben.
Was du lernen wirst:
MySQL AUSLÄNDISCHER SCHLÜSSEL
Syntax:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
Oben ist die Syntax angegeben, die verwendet wird, wenn FOREIGN KEY für eine Tabelle während der Tabellenerstellung oder mit angegeben wird ALTER TABLE-Anweisung.
Lassen Sie uns die verschiedenen Komponenten der Syntax verstehen:
Open Source Cross-Browser-Testtools
- constrantName: Dies ist der symbolische Name, den wir für die angegebene FK-Einschränkung definieren möchten. Wenn dies übersprungen wird, weist die MySQL-Engine der FK-Einschränkung automatisch einen Namen zu.
- referingColumnName: Dies ist die Spalte, die auf die Werte in einer anderen Tabelle verweist, wie in der Spalte in der angegebenen Tabelle angegeben.
- Referenztabelle / übergeordnete Tabelle: Dies bezieht sich auf den Namen der Tabelle, aus der auf die Werte verwiesen wird.
- Referenzspalte: Der Spaltenname in der angegebenen Tabelle.
- Referenzoption: Dies sind die Aktionen, die angezeigt werden, wenn eine Aktualisierungs- oder Löschaktion für die Tabelle ausgeführt wird, die die Fremdschlüsseleinschränkung enthält. Sowohl UPDATE als auch DELETE können dieselben oder unterschiedliche Referenzoptionen haben.
Wir werden später in diesem Tutorial mehr über verschiedene referenzielle Integritätsaktionen erfahren.
Sehen wir uns ein Beispiel für eine FOREIGN KEY-Referenz am Beispiel Mitarbeiter / Abteilung an. Wir werden eine Tabelle Abteilung mit Spalten erstellen - Abteilung-ID (int & PRIMARY KEY) und Abteilung-Name (varchar).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
Erstellen Sie eine Tabelle Mitarbeiter mit den folgenden Spalten:
Säule | Art |
---|---|
Ich würde | INT (Primärschlüssel) |
Name | VARCHAR |
dept_id | INT (Fremdschlüssel), auf den aus der Abteilungstabelle verwiesen wird |
Adresse | VARCHAR |
Alter | INT |
dob | DATUM |
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE);
Wie Sie sehen können, haben wir in der obigen Employee-Tabelle die Spalte deptId vom Typ Int deklariert und FOREIGN KEY aus der Tabelle Department in der Spalte departmentId definiert.
Dies bedeutet im Wesentlichen, dass die Spalte deptId in der Employee-Tabelle nur Werte enthalten kann, die in der Department-Tabelle enthalten sind.
Versuchen wir, Daten in diese Tabellen einzufügen, und sehen, wie FOREIGN KEY CONSTRAINT funktioniert.
- Erstellen Sie zuerst einen Datensatz in der Abteilungstabelle und fügen Sie einen Datensatz in der Mitarbeitertabelle hinzu, der auf die ID des Datensatzes verweist, der der Abteilungstabelle hinzugefügt wurde.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Sie werden sehen, dass beide Anweisungen fehlerfrei ausgeführt werden.
- Verweisen Sie nun auf einen Wert für abteilungs-ID, der nicht vorhanden ist.
Zum Beispiel, In der folgenden Abfrageanweisung erstellen wir einen Mitarbeiter mit einer nicht vorhandenen Abteilungs-ID -10
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- In diesem Szenario wird folgende Fehlermeldung angezeigt:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Wenn also FOREIGN KEY-Referenzen definiert werden, ist es im Allgemeinen wichtig sicherzustellen, dass die Tabelle, auf die verwiesen wird, Daten enthält, bevor sie referenziert wird.
Referenzielle Integritätsaktionen
Versuchen wir zunächst zu verstehen, was genau referenzielle Integrität ist.
Die referenzielle Integrität hilft dabei, Daten in einem sauberen und konsistenten Zustand zu halten, in dem Tabellen mit einer FOREIGN KEY-Beziehung zueinander in Beziehung stehen.
Einfach ausgedrückt bezieht sich die referenzielle Integrität auf die Aktion, die wir vom Datenbankmodul erwarten, wenn ein UPDATE oder DELETE in der referenzierten Tabelle auftritt, die den FOREIGN KEY enthält.
Zum Beispiel, Angenommen, wir ändern in unserem Beispiel 'Mitarbeiter / Abteilung' die Abteilungs-ID für eine bestimmte Zeile in der Datenbank. Dann wären alle referenzierenden Zeilen in der Employee-Tabelle betroffen. Wir können verschiedene Arten von referenziellen Integritätsszenarien definieren, die in solchen Fällen angewendet werden können.
Hinweis: Die referenzielle Integrität wird während der Einrichtung / Deklaration von FOREIGN KEY als Teil der Befehle / Abschnitte ON DELETE und ON UPDATE definiert.
Beziehen Sie sich hier auf eine Beispielabfrage (für das Beispiel Mitarbeiter / Abteilung):
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100)); CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE {ref-integrity-action} ON DELETE {ref integrity action});
Fügen Sie einige Daten wie folgt in diese Tabellen ein:
INSERT INTO department VALUES (1, 'ENGINEERING'), (2,'ACCOUNTING'), (3, 'MARKETING'), (4, 'HR'), (5, 'LEGAL'); INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32,'1988-02-12',1), (2, 'RYAN HILMAN', 'SEATTLE',43, '1977-03-15',1), (3, 'KAVITA SINGH', 'DELHI', 42, '1978-02-18',4), (4, 'DAVID BECKHAM', 'LONDON', 40, '1980-07-13',3), (5, 'PRITI KUMARI', 'DELHI', 35, '1985-12-11',2), (6, 'FRANK BALDING', 'NEW YORK', 35, '1985-08-25',5)
Es gibt 4 Referenzaktionen, die von MySQL unterstützt werden. Versuchen wir, jeden einzelnen von ihnen zu verstehen.
# 1) CASCADE
Dies ist eine der am häufigsten verwendeten referenziellen Integritätsaktionen. Wenn Sie DELETE und UPDATE auf CASCADE setzen, werden die vorgenommenen Änderungen an der referenzierten Tabelle in der referenzierenden Tabelle angewendet, d. H. Im Beispiel 'Mitarbeiter / Abteilung'. Angenommen, jemand löscht eine Zeile in der Abteilungstabelle, in der Abteilungsname = ACCOUNTING angegeben ist, und alle Zeilen in der Mitarbeitertabelle mit der Abteilungs-ID als der Buchhaltungstabelle werden ebenfalls gelöscht.
Lassen Sie uns dies anhand eines Beispiels verstehen:
SELECT * FROM employee;
Ich würde | Name | Adresse | Alter | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
zwei | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | zwei |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Löschen Sie den Datensatz aus der Abteilungstabelle, in der departmentName = 'ACCOUNTING'.
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Da es sich um eine CASCADE-Referenzaktion handelt, sollten alle Zeilen mit der Abteilungs-ID = 2 (für die Abteilung 'RECHNUNGSLEGUNG') ebenfalls gelöscht werden. Führen Sie erneut eine SELECT-Abfrage für die Employee-Tabelle durch.
SELECT * FROM employee;
Ich würde | Name | Adresse | Alter | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
zwei | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Wie Sie oben sehen können, werden diese Zeilen aufgrund der referenziellen Integrität von CASCADE in den Zeilen in der Employee-Tabelle, die die gelöschte Spalte als FOREIGN KEY bezeichnet haben, gelöscht.
# 2) EINSCHRÄNKUNG / KEINE MASSNAHMEN
Der RESTRICT- oder NO ACTION-Modus erlaubt keine UPDATE- oder DELETE-Operationen für die Tabelle mit Spalten, auf die in einigen Tabellen als FOREIGN KEY verwiesen wird.
Der NO ACTION-Modus kann angewendet werden, indem einfach die Klauseln ON UPDATE und ON DELETE in der Tabellendeklaration weggelassen werden.
Versuchen wir dasselbe Beispiel und überspringen in diesem Fall einfach die Aktion ON UPDATE und ON DELETE Referential Integrity.
Wenn wir nun versuchen, einen Eintrag in der referenzierten Tabelle zu löschen, wird eine Fehlermeldung angezeigt, da wir die referenzielle Aktion auf RESTRICT gesetzt haben
DELETE FROM department WHERE departmentName='ACCOUNTING';
Sie werden einen Fehler wie den folgenden sehen, wenn Sie versuchen, den obigen Befehl DELETE auszuführen.
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`))
# 3) SET NULL
Mit SET NULL würde jedes UPDATE oder DELETE in der referenzierten Tabelle dazu führen, dass ein NULL-Wert gegen den Spaltenwert aktualisiert wird, der in der referenzierenden Tabelle als FOREIGN KEY markiert ist.
Mit dieser referenziellen Integritätsaktion würde die Definition der Employee-Tabelle wie folgt aussehen:
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON DELETE SET NULL);
Löschen Sie eine Zeile in der Tabelle, auf die verwiesen wird, wie unten gezeigt:
DELETE FROM department WHERE departmentName='ACCOUNTING';
In diesem Fall wird der referenzierte Wert in der Employee-Tabelle auf NULL gesetzt. Führen Sie eine SELECT-Abfrage in der Employee-Tabelle durch, um die Ergebnisse anzuzeigen.
SELECT * FROM employee;
Ich würde | Name | Adresse | Alter | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
zwei | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | NULL |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
# 4) STANDARD EINSTELLEN
Wenn der SET DEFAULT-Modus angegeben wird, wird der Standardwert für die Spalte (wie in der Spaltendeklaration angegeben) ersetzt, falls auf DELETES in der Tabelle verwiesen wird.
Hinweis - Wie per MySQL-Dokumentation Die Option SET DEFAULT wird von MySQL Parser unterstützt, jedoch nicht von DB-Engines wie InnoDB. Dies könnte in Zukunft unterstützt werden.
Um ein solches Verhalten zu unterstützen, können Sie jedoch SET NULL verwenden und einen Trigger für die Tabelle definieren, der einen Standardwert festlegen kann.
Fügen Sie mit der Anweisung ALTER TABLE die Einschränkung FOREIGN KEY hinzu
Oft kann es vorkommen, dass wir einer vorhandenen Tabelle, die diese nicht hat, eine FOREIGN KEY-Einschränkung hinzufügen möchten.
Angenommen, wir haben im Beispiel 'Mitarbeiter und Abteilung' eine Mitarbeitertabelle ohne FOREIGN KEY-Einschränkung erstellt und möchten später die Einschränkung einführen. Dies kann mit dem Befehl ALTER TABLE erreicht werden.
Versuchen wir dies anhand eines Beispiels zu verstehen.
Angenommen, wir haben eine Employee-Tabelle mit der folgenden Definition für den Befehl CREATE.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Hier haben wir eine Spaltenabteilung, aber keine FOREIGN KEY-Einschränkung. In diesem Fall können wir auch ohne Abteilungstabelle beim Einfügen von Datensätzen beliebige Werte angeben.
Nehmen wir später an, wir haben eine separate Abteilungstabelle und möchten dort die Abteilungs-ID als AUSLÄNDISCHEN SCHLÜSSEL mit der Mitarbeitertabelle verknüpfen.
Wie erstelle ich ein Array von Strings in Java?
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Was ist, wenn diese Tabelle vorhandene Daten enthält? Können wir die Tabelle ALTER ändern und die Einschränkung FOREIGN KEY hinzufügen?
Die Antwort lautet ja - wir können mit der Bedingung, dass die vorhandenen Werte in der Spalte, auf die aus einer anderen Tabelle verwiesen wird, diese Werte in der übergeordneten Tabelle selbst haben sollten.
Erstellen Sie eine Employee-Tabelle ohne FOREIGN KEY-Einschränkung, fügen Sie einige Daten hinzu und versuchen Sie, mit dem Befehl ALTER eine FOREIGN KEY-Einschränkung hinzuzufügen.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',1); INSERT INTO EMPLOYEE VALUES (2, 'ANITA SHERWIN', 'COLUMBIA', 32, '1988-02-12',10);
Erstellen Sie eine Abteilungstabelle und fügen Sie FOREIGN KEY für das Feld 'deptId' in der Employee-Tabelle hinzu, wie unten gezeigt:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
Wenn wir an dieser Stelle versuchen, die Einschränkung FOREIGN KEY hinzuzufügen,
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Dann wird eine Fehlermeldung angezeigt, da die Employee-Tabelle einige Daten enthält, die referenzielle Integritätsbedingung jedoch nicht erfüllt werden kann, da die Department-Tabelle noch keine Daten enthält.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`#sql-63_87`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Um die FOREIGN KEY-Einschränkung zu haben, müssen wir zuerst Daten zur Abteilungstabelle hinzufügen. Fügen Sie die erforderlichen Datensätze in die Abteilungstabelle ein.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Fügen Sie die Einschränkung FOREIGN KEY erneut hinzu, indem Sie dieselbe ALTER TABLE-Anweisung ausführen. Sie werden feststellen, dass diesmal der Befehl erfolgreich ist und die Employee-Tabelle erfolgreich aktualisiert wurde, um deptId als FOREIGN KEY aus der Department-Tabelle zu erhalten.
Löschen einer FOREIGN KEY-Einschränkung
Ähnlich wie beim Hinzufügen einer FOREIGN KEY-Einschränkung ist es auch möglich, eine vorhandene FOREIGN KEY-Einschränkung aus einer Tabelle zu löschen.
Dies kann mit dem Befehl ALTER TABLE erreicht werden.
Syntax:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Hier ist 'childTable' der Name der Tabelle, für die die Einschränkung 'FOREIGN KEY' definiert ist, während der Name 'Fremdschlüsseleinschränkung' der Name / das Symbol ist, mit dem der FOREIGN KEY definiert wurde.
Sehen wir uns ein Beispiel anhand der Tabelle 'Mitarbeiter / Abteilung' an. Verwenden Sie den folgenden Befehl, um eine Einschränkung mit dem Namen 'depIdFk' aus der Employee-Tabelle zu entfernen:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
Häufig gestellte Fragen
F # 1) Wie kann ich Fremdschlüssel in MySQL ändern?
Antworten: FOREGIN KEY kann mit dem Befehl ALTER TABLE hinzugefügt / entfernt werden.
Um einen neuen AUSLÄNDISCHEN SCHLÜSSEL zu ändern oder hinzuzufügen, können Sie den Befehl ALTER verwenden und den Spalten AUSLÄNDISCHER SCHLÜSSEL und die Referenzierungstabelle definieren, auf die aus der untergeordneten Tabelle verwiesen wird.
F # 2) Wie setze ich mehrere Fremdschlüssel in MySQL?
Antworten: Eine Tabelle in MySQL kann mehrere AUSLÄNDISCHE SCHLÜSSEL haben, die von derselben übergeordneten Tabelle oder verschiedenen übergeordneten Tabellen abhängen können.
Verwenden Sie die Mitarbeiter- / Abteilungstabelle und fügen Sie den AUSLÄNDISCHEN SCHLÜSSEL für den Abteilungsnamen sowie die Abteilungs-ID in die Mitarbeitertabelle ein.
Lesen Sie die CREATE-Anweisungen in beiden Tabellen wie folgt
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100) UNIQUE NOT NULL); ----xxxxx------xxxxx------xxxxx-------xxxxx------xxxxx CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, depName VARCHAR(100), CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT depNameFk FOREIGN KEY (depName) REFERENCES department(departmentName) ON UPDATE CASCADE ON DELETE CASCADE);
F # 3) Wie deaktiviere ich Fremdschlüsseleinschränkungen in MySQL?
Antworten: FOREIGN KEY-Einschränkungen sind normalerweise erforderlich, wenn jemand versucht, eine vorhandene Tabelle, auf die verwiesen wird, abzuschneiden. Dazu können Sie den folgenden Befehl verwenden:
SET FOREIGN_KEY_CHECKS=0;
Dies würde eine Sitzungsvariable setzen und die FOREIGN_KEY_CHECKS vorübergehend deaktivieren. Nach dieser Einstellung können Sie Lösch- / Abschneidevorgänge ausführen, die sonst nicht möglich gewesen wären.
VPN für kodi kostenlos
Stellen Sie jedoch sicher, dass dies ein Administratorrecht ist und mit Bedacht verwendet werden sollte.
F # 4) Wie finde ich die Fremdschlüsselreferenzen für eine Tabelle in MySQL?
Antworten: Um alle vorhandenen FOREIGN KEY-Einschränkungen aufzulisten, können Sie die Tabelle 'INNODB_FOREIGN_COLS' in 'INFORMATION_SCHEMA' verwenden.
Führen Sie einfach den folgenden Befehl aus, um alle FOREIGN KEY-Deklarationen abzurufen, die für eine bestimmte MySQL-Serverinstanz vorhanden sind.
ICH WÜRDE | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | AbteilungId | 1 |
F # 5) Sollte die referenzierte Spalte als AUSLÄNDISCHER SCHLÜSSEL ein Primärschlüssel in der referenzierten Tabelle sein?
Antworten: Gemäß der Definition von FOREIGN KEY muss die Spalte, auf die als FOREIGN KEY verwiesen wird, der PRIMARY KEY aus der Tabelle sein, auf die verwiesen wird.
Mit den neueren Versionen von MySQL und dem InnoDB-Datenbankmodul können Sie jedoch auch auf eine Spalte mit FOREIGN KEY verweisen, die eine EINZIGARTIGE Einschränkung aufweist und möglicherweise nicht unbedingt PRIMARY KEY ist.
F # 6) Erstellt FOREIGN KEY INDEX in MySQL?
Antworten: Sowohl für den Primärschlüssel als auch für die eindeutige Einschränkung erstellt MySQL automatisch einen INDEX für solche Spalten.
Da wir bereits wissen, dass FOREIGN KEY-Referenzen nur auf Spalten angewendet werden können, die Primärschlüssel sind, oder auf Spalten mit eindeutigen Werten, wird für alle Spalten, die als FOREIGN KEY bezeichnet werden, ein Index erstellt.
Verwenden Sie den folgenden Befehl, um den Index für eine Tabelle anzuzeigen:
SHOW INDEX from {dbName.tableName};
Für unser Beispiel 'Mitarbeiter / Abteilung' haben wir 'Abteilung' in 'Mitarbeiter' als AUSLÄNDISCHEN SCHLÜSSEL aus der Tabelle 'Abteilung' hinzugefügt.
Sehen wir uns die erstellten Indizes in den Tabellen 'Mitarbeiter' und 'Abteilung' an.
USE my_sql_foreign_key; SHOW INDEX from employee;
Tabelle | Nicht einzigartig | Schlüsselname | Seq_in_index | Spaltenname | Kollation | Kardinalität | Unterabschnitt | Verpackt | Null | Indextyp |
---|---|---|---|---|---|---|---|---|---|---|
Mitarbeiter | 0 | PRIMÄR | 1 | Ich würde | ZU | 0 | NULL | NULL | BTREE | |
Mitarbeiter | 1 | depIdFk | 1 | deptId | ZU | 0 | NULL | NULL | JA | BTREE |
Sie können 2 Indizes sehen - einer ist der Primärschlüssel für die Employee-Tabelle und einer für die FOREIGN KEY depId, auf die in der Department-Tabelle verwiesen wird.
SHOW INDEX from department;
Tabelle | Nicht einzigartig | Schlüsselname | Seq_in_index | Spaltenname | Kollation | Kardinalität | Unterabschnitt | Verpackt | Null | Indextyp |
---|---|---|---|---|---|---|---|---|---|---|
Abteilung | 0 | PRIMÄR | 1 | AbteilungId | ZU | 0 | NULL | NULL | BTREE |
Hier können Sie sehen, dass wir für die Abteilungstabelle nur 1 Index für den Primärschlüssel haben (der in der Mitarbeitertabelle als AUSLÄNDISCHER SCHLÜSSEL bezeichnet wird).
F # 7) Kann FOREIGN KEY in MySQL NULL sein?
Antworten: Ja, es ist vollkommen in Ordnung, NULL für die Spalte zu haben, die eine FOREIGN KEY-Abhängigkeit von einer anderen Tabelle hat. Dies spielt auch auf die Tatsache an, dass NULL kein realer Wert ist und daher nicht mit den Werten in der übergeordneten Tabelle übereinstimmt / verglichen wird.
Fazit
In diesem Tutorial haben wir verschiedene Konzepte zur Verwendung von FOREIGN KEYS in MySQL-Datenbanken kennengelernt.
Der AUSLÄNDISCHE SCHLÜSSEL vereinfacht das Aktualisieren und Löschen mit entsprechenden Einschränkungen, aber manchmal kann das Einfügen und / oder Löschen des gesamten Prozesses des Einfügens und / oder Löschens ziemlich umständlich sein.
Wir haben gelernt, wie man AUSLÄNDISCHE SCHLÜSSEL erstellt und wie man einen vorhandenen AUSLÄNDISCHEN SCHLÜSSEL aktualisiert und aus der untergeordneten Tabelle entfernt. Wir haben auch verschiedene referenzielle Integritätsaktionen kennengelernt und erfahren, wie wir mit den verschiedenen verfügbaren Optionen wie CASCADE, NO ACTION, SET NULL usw. ein unterschiedliches Verhalten erzielen können.
Literatur-Empfehlungen
- MySQL Tutorial zum Erstellen von Tabellen mit Beispielen
- MySQL Insert Into Table - Syntax und Beispiele für Insert-Anweisungen
- MySQL Create View Tutorial mit Codebeispielen
- MySQL CONCAT- und GROUP_CONCAT-Funktionen mit Beispielen
- MySQL Transaction Tutorial mit Programmierbeispielen
- MySQL UNION - Umfassendes Tutorial mit Union-Beispielen
- So laden Sie MySQL für Windows und Mac herunter
- Unterschied zwischen SQL und MySQL und SQL Server (mit Beispielen)