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

Beispiele und Vergleich von 3 Methoden zur Deduplizierung von JS-Objekt-Arrays

Inhaltsverzeichnis 1. Vergleich der Daten vor und...

Eine kurze Diskussion darüber, ob zu viele MySQL-Datenabfragen OOM verursachen

Inhaltsverzeichnis Auswirkungen eines vollständig...

Installations- und Verwendungsschritte für Docker Compose

Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...

Vue implementiert ein einfaches Einkaufswagenbeispiel

In diesem Artikelbeispiel wird der spezifische Co...

Im Mybatis MySQL-Löschvorgang kann nur die erste Datenmethode gelöscht werden

Insekten Wie in der Abbildung gezeigt, begann ich...

Erläuterung unveränderlicher Werte in React

Inhaltsverzeichnis Was sind unveränderliche Werte...

Schritte zum Erstellen eines Docker-Images mit Dockerfile

Dockerfile ist eine Textdatei, die Anweisungen en...

So verwenden Sie Dockerfile zum Erstellen von Images in Docker

Erstellen des Images Früher haben wir verschieden...

So definieren Sie Eingabetyp=Dateistil

Warum die Dateisteuerung verschönern? Stellen Sie ...

Beispiele für die MySQL-Verschlüsselung und -Entschlüsselung

Beispiele für die MySQL-Verschlüsselung und -Ents...