Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen

Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen

Amtliche Dokumentation:
https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

1. Fremdschlüsselfunktion:

MySQL verwendet Fremdschlüsseleinschränkungen, um die Integrität und Genauigkeit der Daten zwischen Tabellen sicherzustellen.

2. Bedingungen für die Verwendung von Fremdschlüsseln

  • Beide Tabellen müssen InnoDB-Tabellen sein. MyISAM-Tabellen unterstützen derzeit keine Fremdschlüssel (es wird gesagt, dass zukünftige Versionen dies möglicherweise unterstützen, aber zumindest wird es derzeit nicht unterstützt).
  • Für die Fremdschlüsselspalte muss ein Index erstellt werden. MySQL 4.1.2 und spätere Versionen erstellen beim Erstellen eines Fremdschlüssels automatisch einen Index. Wenn Sie jedoch eine frühere Version verwenden, müssen Sie explizit einen Index erstellen.
  • Die Spalten der beiden Tabellen in der Fremdschlüsselbeziehung müssen ähnliche Datentypen aufweisen, also Spalten, die ineinander konvertiert werden können, wie etwa int und tinyint, aber nicht int und char.

3. Grammatik erstellen

[CONSTRAINT [Symbol]] Fremdschlüssel
[Indexname] (Spaltenname, …)
REFERENZEN tbl_name (col_name, …)
[ON DELETE Referenzoption]
[ON UPDATE Referenzoption]

Referenzoption:
EINSCHRÄNKEN | KASKADE | AUF NULL SETZEN | KEINE AKTION | STANDARD FESTLEGEN

Diese Syntax kann in CREATE TABLE und ALTER TABLE verwendet werden. Wenn Sie das Symbol CONSTRAINT nicht angeben, generiert MYSQL automatisch einen Namen.
ON DELETE und ON UPDATE geben Einschränkungen für die Ereignisauslösung an und Sie können Parameter festlegen:
RESTRICT (Änderungen an Fremdschlüsseln in Fremdtabellen einschränken)
CASCADE (Fremdschlüsseländerungen folgen)
SET NULL
SET DEFAULT (Den Standardwert festlegen)
KEINE AKTION (keine Aktion, Standard)

CASCADE: Gibt an, dass beim Aktualisieren oder Löschen der übergeordneten Tabelle die entsprechenden Datensätze in der untergeordneten Tabelle aktualisiert oder gelöscht werden.
EINSCHRÄNKUNG und KEINE AKTION: Wenn die untergeordnete Tabelle verknüpfte Datensätze hat, kann die übergeordnete Tabelle nicht unabhängig davon gelöscht oder aktualisiert werden.
SET NULL: Gibt an, dass beim Aktualisieren oder Löschen der übergeordneten Tabelle die entsprechenden Felder der untergeordneten Tabelle auf NULL gesetzt werden.

4. Fallbeispiel

CASCADE-Einschränkungsmodus

1. Erstellen Sie die Power-Tabelle (übergeordnete Tabelle) Land
Tabelle Land erstellen (
id int ungleich null,
Name varchar(30),
Primärschlüssel (ID)
);

2. Datensätze einfügen, in Länderwerte einfügen (1, „Westeuropa“);
in Länderwerte einfügen (2, „Maya“);
in Länderwerte einfügen (3, „Sizilien“);

3. Erstellen Sie eine Waffentabelle (Untertabelle) und legen Sie Einschränkungen fest. Erstellen Sie die Tabelle „Soldat“ (
id int ungleich null,
Name varchar(30),
Länder-ID int,
Primärschlüssel (ID),
Der Fremdschlüssel (country_id) verweist auf country(id) bei Löschkaskade bei Aktualisierungskaskade,
);

4. Referenzintegritätstest, eingefügt in Soldatenwerte (1, „Westeuropäische Infanterie-Auszubildende“, 1);
#insert erfolgreich in Soldatenwerte eingefügt (2, „Maya-Kurzspeerkämpfer“, 2);
#insert erfolgreich in Solider-Werte eingefügt (3, „Sizilien – Normannische Ritter“, 3)
#erfolgreich einfügenin Solider-Werte einfügen (4, „Französischer Schwertkämpfer“, 4);
#Einfügen fehlgeschlagen, da in der Ländertabelle keine Fraktion mit der ID 4 vorhanden ist. 5. Test der Einschränkungsmethode „insert into solider values(4, 'Maya Tiger Warriors', 2);“
#Löschen aus Land mit ID=2 erfolgreich eingefügt;
#Dies führt dazu, dass die Datensätze mit den IDs 2 und 4 in der Soldatentabelle gleichzeitig gelöscht werden, da diese Fraktion in der übergeordneten Tabelle nicht mehr vorhanden ist und die entsprechenden Waffen daher natürlich verschwinden. Update Country Set ID=8, wobei ID=1 ist.
#Als Ergebnis werden alle Datensätze in der Soldatentabelle mit country_id 1 ebenfalls auf 8 geändert

Mit SET NULL-Einschränkung

1. Erstellen Sie eine Soldatentabelle (Untertabelle) und stellen Sie eine Einschränkungsbeziehung her, um die Tabelle zu löschen, falls ein Soldat vorhanden ist.
Tabelle erstellen Soldat(
id int ungleich null,
Name varchar(30),
Länder-ID int,
Primärschlüssel (ID),
Der Fremdschlüssel (country_id) verweist auf country(id), beim Löschen wird auf Null gesetzt, beim Aktualisieren wird auf Null gesetzt,
);

2. Referenzintegritätstest, eingefügt in Soldatenwerte (1, „Westeuropäische Infanterie-Auszubildende“, 1);
#insert erfolgreich in Soldatenwerte eingefügt (2, „Maya-Kurzspeerkämpfer“, 2);
#insert erfolgreich in Solider-Werte eingefügt (3, „Sizilien – Normannische Ritter“, 3)
#erfolgreich einfügenin Solider-Werte einfügen (4, „Französischer Schwertkämpfer“, 4);
#Einfügen fehlgeschlagen, da in der Ländertabelle keine Fraktion mit der ID 4 vorhanden ist. 3. Testen Sie die Einschränkungsmethode „Einfügen in Soldatenwerte“ (4, „Sizilianischer Bogenschütze“, 3);
#Löschen aus Land mit ID=3 erfolgreich eingefügt;
#Dies führt dazu, dass die Datensätze mit den IDs 3 und 4 in der Soldatentabelle auf NULL gesetzt werden
Ländersatz-ID aktualisieren=8, wobei ID=1 ist;
# Bewirkt, dass alle Datensätze in der Soldatentabelle, bei denen country_id 1 ist, auf NULL gesetzt werden

Im NO ACTION- oder RESTRICT-Modus (Standard)

1. Erstellen Sie eine Soldatentabelle (Untertabelle) und stellen Sie eine Einschränkungsbeziehung her, um die Tabelle zu löschen, falls ein Soldat vorhanden ist.
Tabelle erstellen Soldat(
id int ungleich null,
Name varchar(30),
Länder-ID int,
Primärschlüssel (ID),
Der Fremdschlüssel (country_id) verweist auf country(id) beim Löschen RESTRICT beim Aktualisieren RESTRICT,
);

2. Referenzintegritätstest, eingefügt in Soldatenwerte (1, „Westeuropäische Infanterie-Auszubildende“, 1);
#insert erfolgreich in Soldatenwerte eingefügt (2, „Maya-Kurzspeerkämpfer“, 2);
#insert erfolgreich in Solider-Werte eingefügt (3, „Sizilien – Normannische Ritter“, 3)
#erfolgreich einfügenin Solider-Werte einfügen (4, „Französischer Schwertkämpfer“, 4);
#Einfügen fehlgeschlagen, da in der Ländertabelle 3 keine Fraktion mit der ID 4 vorhanden ist. Test der Einschränkungsmethode „insert into solider values(4, 'Western European Knights', 1);“
#Löschen aus Land mit ID=1 erfolgreich eingefügt;
#Ein Fehler ist aufgetreten. In der untergeordneten Tabelle gibt es zugehörige Datensätze, daher können die entsprechenden Datensätze in der übergeordneten Tabelle nicht gelöscht werden. Das heißt, die Waffentabelle enthält auch Waffen, die zu Westeuropa gehören, daher können die westeuropäischen Streitkräfte in der übergeordneten Tabelle nicht einzeln gelöscht werden. Update Country Set ID=8, wobei ID=1;
#Fehler, es gibt zugehörige Datensätze in der untergeordneten Tabelle, daher kann die übergeordnete Tabelle nicht geändert werden

Oben finden Sie eine ausführliche Erläuterung der MySQL-Fremdschlüsseleinschränkungen. Weitere Informationen zu MySQL-Fremdschlüsseleinschränkungen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Spezielle Methode zum Hinzufügen von Fremdschlüsseleinschränkungen in MySQL
  • MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung
  • Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen
  • Beispielerklärung von 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

<<:  Detailliertes Tutorial zur Installation von CUDA9.0 auf Ubuntu16.04

>>:  Detaillierte Erklärung der dynamischen Komponenten von vue.js

Artikel empfehlen

So legen Sie die Breite und Höhe von HTML-Tabellenzellen fest

Beim Erstellen von Webseiten tritt häufig das Pro...

Lösen Sie das Matching-Problem in CSS

Problembeschreibung Wie wir alle wissen, wird bei...

Detailliertes Beispiel zum Erstellen und Löschen von Tabellen in MySQL

Der Befehl zur Tabellenerstellung erfordert: Der...

Natives JavaScript zum Erzielen von Folieneffekten

Wenn wir eine Seite erstellen, insbesondere eine ...

Detaillierte Erklärung zur Verwendung von Teleport in Vue3

Inhaltsverzeichnis Zweck des Teleports So funktio...

Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

Vorwort Vor Kurzem wurde ein Teil der Geschäftstä...

Beispiel und Lösung für einen SQL-Injection-Sicherheitslückenprozess

Codebeispiel: öffentliche Klasse JDBCDemo3 { öffe...

Eine kurze Diskussion darüber, ob CSS das Rendern von Seiten blockiert

Vielleicht weiß jeder, dass die JS-Ausführung die...

JavaScript, um einen ausgefallenen Karusselleffekt zu erzielen

In diesem Artikel werden zwei Methoden zur Implem...

jQuery implementiert die Formularvalidierung

Verwenden Sie jQuery, um die Formularvalidierung ...

So verwenden Sie benutzerdefinierte CSS-Variablen in Vue

Inhaltsverzeichnis Die benutzerdefinierte CSS-Var...