MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung

MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung

Die MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) ist ein spezielles Feld einer Tabelle, das häufig mit Primärschlüsseleinschränkungen verwendet wird. Bei zwei Tabellen mit einer zugehörigen Beziehung ist die Tabelle, in der sich der Primärschlüssel im zugehörigen Feld befindet, die Primärtabelle (übergeordnete Tabelle), und die Tabelle, in der sich der Fremdschlüssel befindet, ist die Sekundärtabelle (untergeordnete Tabelle).

Fremdschlüssel werden verwendet, um eine Verbindung zwischen der Primärtabelle und der Sekundärtabelle herzustellen, die Daten in den beiden Tabellen zu verbinden und die Konsistenz und Integrität der Daten in den beiden Tabellen einzuschränken. Beispielsweise gibt es an einem Obststand nur vier Obstsorten: Äpfel, Pfirsiche, Pflaumen und Wassermelonen. Wenn Sie dann zum Obststand gehen, um Obst zu kaufen, können Sie nur Äpfel, Pfirsiche, Pflaumen und Wassermelonen auswählen. Andere Früchte können nicht gekauft werden.

Wenn ein Datensatz aus der Haupttabelle gelöscht wird, muss auch der entsprechende Datensatz in der Tabelle entsprechend geändert werden. Eine Tabelle kann einen oder mehrere Fremdschlüssel haben, und Fremdschlüssel können Nullwerte sein. Wenn sie keine Nullwerte sind, muss der Wert jedes Fremdschlüssels einem Wert des Primärschlüssels in der Haupttabelle entsprechen.

Beim Definieren von Fremdschlüsseln müssen Sie die folgenden Regeln beachten:

  • Die Primärtabelle muss bereits in der Datenbank vorhanden sein oder die Tabelle sein, die gerade erstellt wird. Im letzteren Fall sind die Master-Tabelle und die Slave-Tabelle dieselbe Tabelle. Eine solche Tabelle wird als selbstreferenzielle Tabelle bezeichnet, und diese Struktur wird als selbstreferenzielle Integrität bezeichnet.
  • Für die Primärtabelle muss ein Primärschlüssel definiert werden.
  • Primärschlüssel dürfen keine Nullwerte enthalten, in Fremdschlüsseln sind jedoch Nullwerte zulässig. Das heißt, solange jeder von Null verschiedene Wert des Fremdschlüssels im angegebenen Primärschlüssel vorkommt, ist der Inhalt dieses Fremdschlüssels korrekt.
  • Geben Sie nach dem Tabellennamen der Haupttabelle einen Spaltennamen oder eine Kombination aus Spaltennamen an. Diese Spalte oder Spaltenkombination muss der Primärschlüssel oder Kandidatenschlüssel der Primärtabelle sein.
  • Die Anzahl der Spalten im Fremdschlüssel muss mit der Anzahl der Spalten im Primärschlüssel der Primärtabelle übereinstimmen.
  • Der Datentyp der Fremdschlüsselspalte muss mit dem Datentyp der entsprechenden Spalte im Primärschlüssel der Primärtabelle übereinstimmen.

Festlegen von Fremdschlüsseleinschränkungen beim Erstellen einer Tabelle

In der Anweisung CREATE TABLE wird der Fremdschlüssel durch das Schlüsselwort FOREIGN KEY angegeben. Das spezifische Syntaxformat lautet wie folgt:

[CONSTRAINT <Fremdschlüsselname>] FOREIGN KEY Feldname [, Feldname 2, ...]
REFERENZEN <Primärtabellenname> Primärschlüsselspalte 1 [, Primärschlüsselspalte 2, …]

Beispiel 1

Um die Fremdschlüsselbeziehung zwischen Tabellen darzustellen, erstellt dieses Beispiel eine Abteilungstabelle tb_dept1 in der Datenbank test_db. Die Tabellenstruktur ist in der folgenden Tabelle dargestellt.

Feldname Datentypen Bemerkung
Ausweis INT(11) Abteilungsnummer
Name VARCHAR(22) Abteilungsname
Standort VARCHAR(22) Standort der Abteilung

Die SQL-Anweisung zum Erstellen von tb_dept1 und das laufende Ergebnis lauten wie folgt.

mysql> TABELLE ERSTELLEN tb_dept1
    -> (
    -> id INT(11) PRIMÄRSCHLÜSSEL,
    -> Name VARCHAR(22) NOT NULL,
    -> Standort VARCHAR(50)
    -> );
Abfrage OK, 0 Zeilen betroffen (0,37 Sek.)

Erstellen Sie eine Datentabelle tb_emp6 und erstellen Sie eine Fremdschlüsseleinschränkung für Tabelle tb_emp6. Lassen Sie den Schlüssel deptId mit dem Primärschlüssel id der Tabelle tb_dept1 als Fremdschlüssel verknüpfen. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.

mysql> TABELLE ERSTELLEN tb_emp6
    -> (
    -> id INT(11) PRIMÄRSCHLÜSSEL,
    -> Name VARCHAR(25),
    -> deptId INT(11),
    -> Gehalt FLOAT,
    -> EINSCHRÄNKUNG fk_emp_dept1
    -> FREMDER SCHLÜSSEL(deptId) REFERENZEN tb_dept1(id)
    -> );
Abfrage OK, 0 Zeilen betroffen (0,37 Sek.)

mysql> DESC tb_emp6;
+--------+----------+------+-----+---------+---------+----------+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+--------+----------+------+-----+---------+---------+----------+
| Ich würde | int(11) | NEIN | PRI | NULL | |
| Name | varchar(25) | JA | | NULL | |
| deptId | int(11) | JA | MUL | NULL | |
| Gehalt | Float | JA | | NULL | |
+--------+----------+------+-----+---------+---------+----------+
4 Reihen im Satz (1,33 Sek.)

Nachdem die obige Anweisung erfolgreich ausgeführt wurde, wird der Tabelle tb_emp6 eine Fremdschlüsseleinschränkung mit dem Namen fk_emp_dept1 hinzugefügt. Der Fremdschlüsselname ist deptId, was von der Primärschlüssel-ID der Tabelle tb_dept1 abhängt.

Hinweis: Der Fremdschlüssel der Slave-Tabelle muss mit dem Primärschlüssel der Master-Tabelle verknüpft sein und die Datentypen des Primärschlüssels und des Fremdschlüssels müssen konsistent sein. Beispielsweise sind beide vom Typ INT oder beide vom Typ CHAR. Wenn diese Voraussetzung nicht erfüllt ist, tritt beim Anlegen einer Slave-Tabelle der Fehler „ERROR 1005(HY000): Tabelle kann nicht erstellt werden“ auf.

Hinzufügen von Fremdschlüsseleinschränkungen beim Ändern einer Tabelle

Beim Ändern einer Tabelle können auch Fremdschlüsseleinschränkungen hinzugefügt werden. Voraussetzung für das Hinzufügen einer Fremdschlüsseleinschränkung ist jedoch, dass die Daten in der Fremdschlüsselspalte der Slave-Tabelle mit den Daten in der Primärschlüsselspalte der Master-Tabelle übereinstimmen müssen oder dass keine Daten vorhanden sind.

Die Syntax zum Hinzufügen einer Fremdschlüsseleinschränkung beim Ändern einer Datentabelle lautet wie folgt:

ALTER TABLE <Tabellenname> ADD CONSTRAINT <Fremdschlüsselname>
FOREIGN KEY(<Spaltenname>) REFERENCES <primärer Tabellenname> (<Spaltenname>);

Beispiel 2

Ändern Sie die Datentabelle tb_emp2, legen Sie das Feld deptId als Fremdschlüssel fest und verknüpfen Sie es mit der Primärschlüssel-ID der Datentabelle tb_dept1. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.

mysql> ALTER TABLE tb_emp2
    -> EINSCHRÄNKUNG fk_tb_dept1 HINZUFÜGEN
    -> Fremdschlüssel (Abteilungs-ID)
    -> REFERENZEN tb_dept1(id);
Abfrage OK, 0 Zeilen betroffen (1,38 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

mysql> ANZEIGEN CREATE TABLE tb_emp2\G
*************************** 1. Reihe ***************************
       Tabelle: tb_emp2
Tabelle erstellen: CREATE TABLE `tb_emp2` (
  `id` int(11) NICHT NULL,
  `name` varchar(30) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `Gehalt` float DEFAULT NULL,
  Primärschlüssel (`id`),
  SCHLÜSSEL `fk_tb_dept1` (`deptId`),
  EINSCHRÄNKUNG `fk_tb_dept1` FREMDER SCHLÜSSEL (`deptId`) REFERENZEN `tb_dept1` (`id`)
) ENGINE=InnoDB STANDARD-CHARSET=gb2312
1 Zeile im Satz (0,12 Sek.)

Hinweis: Wenn Sie einer bereits erstellten Datentabelle Fremdschlüsseleinschränkungen hinzufügen, stellen Sie sicher, dass die Werte der Spalten, denen die Fremdschlüsseleinschränkungen hinzugefügt werden, alle aus den Primärschlüsselspalten stammen und dass die Fremdschlüsselspalten nicht leer sein können.

Löschen einer Fremdschlüsseleinschränkung

Wenn eine Fremdschlüsseleinschränkung in einer Tabelle nicht mehr benötigt wird, muss sie aus der Tabelle entfernt werden. Sobald der Fremdschlüssel gelöscht ist, wird die Verknüpfung zwischen der Primärtabelle und der Sekundärtabelle entfernt.

Die Syntax zum Löschen einer Fremdschlüsseleinschränkung lautet wie folgt:

ALTER TABLE <Tabellenname> DROP FOREIGN KEY <Name der Fremdschlüsseleinschränkung>;

Beispiel 3

Löschen Sie die Fremdschlüsseleinschränkung fk_tb_dept1 in der Datentabelle tb_emp2. ​​​​Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.

mysql> ALTER TABLE tb_emp2
    -> Fremdschlüssel löschen fk_tb_dept1;
Abfrage OK, 0 Zeilen betroffen (0,19 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

mysql> ANZEIGEN CREATE TABLE tb_emp2\G
*************************** 1. Reihe ***************************
       Tabelle: tb_emp2
Tabelle erstellen: CREATE TABLE `tb_emp2` (
  `id` int(11) NICHT NULL,
  `name` varchar(30) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `Gehalt` float DEFAULT NULL,
  Primärschlüssel (`id`),
  SCHLÜSSEL `fk_tb_dept1` (`deptId`)
) ENGINE=InnoDB STANDARD-CHARSET=gb2312
1 Zeile im Satz (0,00 Sek.)

Es ist ersichtlich, dass FOREIGN KEY in tb_emp2 nicht mehr vorhanden ist und die ursprüngliche Fremdschlüsseleinschränkung mit dem Namen fk_emp_dept erfolgreich gelöscht wurde.

Dies ist das Ende dieses Artikels über die Fallstudie zu MySQL-Fremdschlüsseleinschränkungen (FOREIGN KEY). Weitere relevante Inhalte zu MySQL-Fremdschlüsseleinschränkungen (FOREIGN KEY) finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Spezielle Methode zum Hinzufügen von Fremdschlüsseleinschränkungen in MySQL
  • Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen
  • Beispielerklärung von MySQL-Fremdschlüsseleinschränkungen
  • Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen
  • Einführung in die MySQL-Methode zum Löschen von Tabellendaten mit Fremdschlüsseleinschränkungen
  • Einfache Implementierung zum Ignorieren von Fremdschlüsseleinschränkungen beim Löschen von MySQL-Tabellen
  • So deaktivieren Sie die Überprüfung auf Fremdschlüsseleinschränkungen in untergeordneten MySQL-Tabellen
  • So erstellen und löschen Sie Fremdschlüsseleinschränkungen in MySQL

<<:  So zeigen Sie kleine Symbole in der Browsertitelleiste einer HTML-Webseite an

>>:  Analysieren Sie das Problem beim Herunterladen der Oracle 11g-Image-Konfiguration in Docker

Artikel empfehlen

Implementierung von FIFO in der Linux-Prozesskommunikation

FIFO-Kommunikation (First In First Out) FIFO-Name...

So implementieren Sie Leerzeichen in Taobao mit CSS3

Machen Sie einen leeren Bereich für Taobao: Wenn ...

Tutorial zur Verwendung von $attrs und $listeners in Vue

Inhaltsverzeichnis einführen Beispiel Zusammenfas...

Detaillierte Erklärung zur Installation von PHP7 unter Linux

Wie installiere ich PHP7 unter Linux? 1. Installi...

So fragen Sie Daten aus mehreren unabhängigen Tabellen und Paging in MySQL ab

Mysql mehrere unabhängige Tabellen Abfragedaten u...

Mysql implementiert drei Funktionen zum Feldspleißen

Beim Exportieren von Daten in Operationen ist das...

Ursachen und Lösungen für domänenübergreifende Probleme bei Ajax-Anfragen

Inhaltsverzeichnis 1. Wie entsteht Cross-Domain? ...

7 native JS-Fehlertypen, die Sie kennen sollten

Inhaltsverzeichnis Überblick 1. Bereichsfehler 2....

React implementiert doppelten Schieberegler zum Querschieben

In diesem Artikel wird der spezifische Code für R...

Verzeichnisberechtigungen beim Erstellen eines Containers mit Docker

Als ich gestern ein Projekt schrieb, musste ich d...

JavaScript zum Erzielen eines Texterweiterungs- und -reduzierungseffekts

Die Implementierung des Erweiterns und Reduzieren...