Erstellen, Einschränkungen und Löschen von Fremdschlüsseln in MySQL

Erstellen, Einschränkungen und Löschen von Fremdschlüsseln in MySQL

Vorwort

Ab MySQL-Version 3.23.44 unterstützen InnoDB-Engine-Typtabellen Fremdschlüsseleinschränkungen.

Voraussetzungen für die Verwendung von Fremdschlüsseln:

1. Beide Tabellen müssen InnoDB-Tabellen sein. MyISAM-Tabellen unterstützen derzeit keine Fremdschlüssel (es heißt, dass zukünftige Versionen dies möglicherweise unterstützen, aber zumindest derzeit nicht);

2. Die Fremdschlüsselspalte muss einen Index haben. 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.

3. Die Spalten der beiden Tabellen in der Fremdschlüsselbeziehung müssen ähnliche Datentypen aufweisen, d. h. Spalten, die ineinander konvertiert werden können, z. B. int und tinyint, aber nicht int und char.

Vorteile von Fremdschlüsseln: Sie können zwei Tabellen verknüpfen, die Datenkonsistenz sicherstellen und einige kaskadierende Operationen implementieren.

1. Erstellen von Fremdschlüsseln

Syntax 1: Nachfolgende Additionsmethode

Tabelle ändern, Tabellenname, Einschränkung hinzufügen, Einschränkungsname, Fremdschlüssel (das eingeschränkte Feld in der aktuellen Tabelle), Referenzen, Haupttabellenname (der einzuschränkende Feldname);
Tabelle „Student“ ändern, Einschränkung „fk_class_student“ hinzufügen, Fremdschlüssel (cls_id), Klasse (cls_id), bei Aktualisierung kaskadierend, beim Löschen keine Aktion;

Syntax 2: So erstellen Sie eine Tabelle

CREATE TABLE Student (
sid int Primärschlüssel,
cls_id int ungleich null,
sname varchar(10) nicht null,
Einschränkung fk_class_student Fremdschlüssel (cls_id) verweist auf Klasse (cls_id) bei Update-Kaskade bei Löschen keine Aktion
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Ein zusätzlicher Punkt:

SHOW CREATE TABLE-Klasse

Sie können die Informationen zur Tabellenerstellung abfragen

Bildbeschreibung hier einfügen

CREATE TABLE `Klasse` (
 `cls_id` int NICHT NULL,
 `cls_name` varchar(15) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`cls_id`)
) ENGINE=InnoDB STANDARD-CHARSET=utf8

In der folgenden Demonstration verwenden wir die gerade erstellten Studententabellen und Klassentabellen.

Der Inhalt ist wie folgt

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

2. Über die vier Constraint-Methoden

Bei der Durchführung von Aktualisierungs-/Löschvorgängen an der übergeordneten Tabelle muss der Vorgangstyp der untergeordneten Tabelle

  1. CASCADE: Die Untertabelle löscht alle Daten, die Verweise auf den gelöschten Schlüsselwert enthalten.
  2. SET NULL Wenn die übergeordnete Tabelle gelöscht oder aktualisiert wird, setzt die untergeordnete Tabelle die Spalte, in der sich das Fremdschlüsselfeld des zugehörigen Datensatzes befindet, auf null
  3. RESTRICT Lehnt Löschanforderungen für Felder mit Beziehungen ab (dies ist die standardmäßige und sicherste Einstellung)
  4. NO ACTION ist ähnlich wie RESTRICT

Nehmen wir den Fremdschlüssel, den wir gerade als Beispiel festgelegt haben (bei Update-Kaskade, beim Löschen keine Aktion)

Wenn wir versuchen zu löschen

aus Klasse löschen, wobei cls_id=1

Die Ergebnisse sind wie folgt

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass Löschvorgänge in der Haupttabelle nicht zulässig sind, da in der Fremdschlüsseleinschränkung die Bedingung „Beim Löschen keine Aktion“ vorhanden ist. Aber die Untertabelle kann

Löschen von Student, wobei cls_id=1

Bildbeschreibung hier einfügen

Wenn wir den zugehörigen Schlüssel der übergeordneten Tabelle aktualisieren, kann er aufgrund der Existenz einer Update-Kaskade normal aktualisiert werden.

UPDATE-Klassensatz cls_id=4, wobei cls_id=1

Bildbeschreibung hier einfügen

Und wenn die Haupttabelle aktualisiert wird, werden auch die Fremdschlüsselfelder in der untergeordneten Tabelle aktualisiert

Bildbeschreibung hier einfügen

3. So löschen Sie Fremdschlüssel

alter table subtable name drop foreign key foreign key constraint name alter table student drop foreign key fk_class_student

Nachdem wir den Fremdschlüssel gelöscht haben, wird der Vorgang der übergeordneten Tabelle normalisiert.

Bildbeschreibung hier einfügen

Zusammenfassen

Dies ist das Ende dieses Artikels über die Erstellung, Einschränkung und Löschung von Fremdschlüsseln in MySQL. Weitere Informationen zur Erstellung, Einschränkung und Löschung von Fremdschlüsseln in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls
  • MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung
  • Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen
  • MySQL-Integritätsbeschränkungen – Definition und Beispiel-Tutorial
  • Neue Funktionen in MySQL 8.0 - Einführung in Check Constraints
  • Beispielanweisungen für Indizes und Einschränkungen in MySQL
  • Beispielerklärung von MySQL-Fremdschlüsseleinschränkungen
  • Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen
  • Detaillierte Erläuterung des Beispiels für MySQL-Integritätsbeschränkungen
  • MySQL-Einschränkungen - Super detaillierte Erklärung

<<:  HTML-Tabellen-Markup-Tutorial (43): VALIGN-Attribut der Tabellenüberschrift

>>:  Schritte zum Erstellen eines Dateiservers mit Apache unter Linux

Artikel empfehlen

Detaillierte Schritte zur Installation von MYSQL8.0 auf CentOS7.6

1. Im Allgemeinen ist MariaDB in CentOS standardm...

Tutorial zur Installation, Bereitstellung und Verwaltung von KVM-Virtualisierung

Inhaltsverzeichnis 1.kvm-Bereitstellung 1.1 KVM-I...

Beschreiben Sie kurz den Unterschied zwischen Redis und MySQL

Wir wissen, dass MySQL ein persistenter Speicher ...

So lassen sich Python-Skripte direkt unter Ubuntu ausführen

Nehmen wir als Beispiel das Übersetzungsprogramm....

Die große Rolle von HTML-Meta

Es gibt zwei Metaattribute: Name und http-equiv. D...

CSS löst das Fehlausrichtungsproblem von Inline-Blöcken

Schluss mit Unsinn, Postleitzahl HTML-Teil <di...

Eine detaillierte Einführung in den netstat-Befehl in Linux

Inhaltsverzeichnis 1. Einleitung 2. Beschreibung ...

Einführung und Installation von vue-cli

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

Lösung zur automatischen Beendigung von Docker Run-Containern

Heute ist bei mir ein Problem aufgetreten, als ic...