Detaillierte Erklärung der Grundfunktionen und Verwendung von MySQL-Fremdschlüsseln

Detaillierte Erklärung der Grundfunktionen und Verwendung von MySQL-Fremdschlüsseln

Dieser Artikel veranschaulicht anhand von Beispielen die grundlegenden Funktionen und die Verwendung von MySQL-Fremdschlüsseln. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

In diesem Artikel:

  • Was ist ein Fremdschlüssel
  • Hinzufügen von Fremdschlüsseln
  • Ändern und Löschen von Fremdschlüsseln
  • Fremdschlüsseleinschränkungsmodus

Veröffentlichungsdatum: 12.04.2018


Was ist ein Fremdschlüssel:

  • Ein Fremdschlüssel ist ein Feld in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. Dieses Feld kann als Fremdschlüssel bezeichnet werden.
  • Eine Tabelle kann mehrere Fremdschlüssel haben.
  • Fremdschlüssel werden verwendet, um die Beziehung zwischen Tabellen einzuschränken. Man kann sagen, dass Fremdschlüssel Beziehungen zwischen Tabellen abbilden. Diese Beziehung kann uns helfen, mit der Nähe und Existenz der Beziehung zwischen Tabellen umzugehen ( beispielsweise ist die CID-Klassennummer in der Schülertabelle mit der ID in der Klassentabelle verknüpft. Die CID sollte nicht nicht vorhanden sein. Wenn der Fremdschlüssel CID nicht hinzugefügt und die Beziehung nicht hergestellt wird, wissen wir nicht, dass die Klassennummer nicht vorhanden ist .).
  • Mit anderen Worten: Fremdschlüssel sagen dem Datenbanksystem, was wir als Beziehung betrachten. Das System kennt die tatsächliche Bedeutung reiner Daten nicht und Fremdschlüssel sagen dem System, wie es mit deren Beziehung umgehen soll.
  • Der Kern des Fremdschlüssels ist daher eine Einschränkung.

Hinzufügen von Fremdschlüsseln:

  • Voraussetzung für die Erstellung eines Fremdschlüssels ist, dass das Feld zunächst ein Index ist. Wenn nicht, wird der Fremdschlüssel als normaler Index erstellt [du musst dich also nicht darum kümmern].
  • Eine weitere Voraussetzung für die Erstellung eines Fremdschlüssels ist, dass die „Zeigetabelle“ erstellt wurde. Für eine nicht vorhandene Tabelle kann der Fremdschlüssel nicht verwendet werden, um ihr zu entsprechen.
  • Möglichkeiten zur Steigerung:
    • 1. Definieren Sie es beim Erstellen der Tabelle und verwenden Sie Fremdschlüsselreferenzen, um auf die Tabelle (Primärschlüssel) zu verweisen, nachdem alle Felder definiert wurden, zum Beispiel image
    • 2. Sie können die hinzuzufügenden Felder auch ändern: „Alter Table Table Name“ – „Add [Constraint Foreign Key Name]“ – „Foreign Key“ (Fremdschlüsselfeld) verweist auf die übergeordnete Tabelle (Primärschlüsselfeld);
      • Einschränkung des Fremdschlüsselnamens: Kann bei der Definition des Namens des Fremdschlüssels hilfreich sein, wird aber nicht empfohlen, da der Fremdschlüsselname eindeutig sein muss und der vom System definierte Name nie wiederholt werden darf.
Tabelle „Student“ erstellen (
ID int Primärschlüssel auto_increment,
Name varchar(15) nicht null,
Geschlecht varchar(10) nicht null,
cid int,
Fremdschlüssel (cid) verweist auf Klasse (id)
);
Tabellenklasse erstellen(
ID int Primärschlüssel auto_increment,
cname varchar(15)
);

Auffüllen:

  • Wenn in MySQL die Speicher-Engine nicht innodb ist, kann die Fremdschlüsseleinschränkung nicht wirksam werden, selbst wenn der Fremdschlüssel erfolgreich hinzugefügt werden kann.
  • Fremdschlüsselnamen können nicht wiederholt werden. Daher wird von der Verwendung von eingeschränkten Fremdschlüsselnamen abgeraten.

Ändern und Löschen von Fremdschlüsseln:

  • Änderung: Sie können die Fremdschlüsselinformationen, z. B. worauf der Fremdschlüssel verweist, nicht ändern. Sie können sie nur zuerst löschen und dann hinzufügen.
  • Löschsyntax: Tabelle ändern, Tabellenname, Fremdschlüssel löschen, Fremdschlüsselname;
    • Der Fremdschlüsselname ist hier nicht das Fremdschlüsselfeld, sondern der Fremdschlüsselname. Wenn für die Definition keine Einschränkung verwendet wird, können Sie „show create“ verwenden, um den systemdefinierten Fremdschlüsselnamen in der Anweisung zur Tabellenerstellung anzuzeigen.
    • image

Auffüllen:

  • Wenn Sie beim Löschen eines Fremdschlüssels desc verwenden, sehen Sie, dass die Tabellenstruktur auch MUL hat, was ein Index ist. Denn wenn ein Fremdschlüssel erstellt wird, wird das Feld als Index erstellt. Wenn Sie es nicht behalten möchten, können Sie den Indexfeldnamen auf den Tabellennamen setzen.

Fremdschlüsseleinschränkungsmodus:

  • Fremdschlüssel werden verwendet, um die Beziehung zwischen Tabellen einzuschränken.
  • (Die Tabelle, die den Fremdschlüssel erstellt, wird als untergeordnete Tabelle bezeichnet, und die Tabelle, auf die sie verweist, wird als übergeordnete Tabelle bezeichnet.)
    • Für untergeordnete Tabellen: Sie können das Einfügen und Ändern von untergeordneten Tabellen einschränken [diese Einschränkung ist die Einschränkung der übergeordneten Tabelle auf die untergeordnete Tabelle].
      • Wenn beim Einfügen und Ändern von Fremdschlüsseln im Fremdschlüsselfeld keine entsprechende Entsprechung gefunden werden kann, schlägt das Einfügen/Ändern fehl (so ist es beispielsweise beim Einfügen eines Kursauswahldatensatzes nicht möglich, einen Kurs einzufügen, der in der Kurstabelle nicht vorhanden ist).
      • Zum Beispiel: image
    • Für die übergeordnete Tabelle: Das Löschen und Aktualisieren der übergeordneten Tabelle kann eingeschränkt werden. Normalerweise gibt es die folgenden Einschränkungsmodi. [Diese Einschränkung ist die Einschränkung der untergeordneten Tabelle auf die übergeordnete Tabelle]
      • Modell:
        • Strenger Modus: Wenn beim Löschen und Aktualisieren von Fremdschlüsseln die Primärschlüsseldaten des entsprechenden Datensatzes bereits von der untergeordneten Tabelle verwendet werden, können sie nicht gelöscht werden (wenn sich beispielsweise bereits jemand für einen Kurs angemeldet hat, kann die Schule nicht so dumm sein, den Kurs zu löschen, und kann nur die Kurse löschen, für die sich noch niemand angemeldet hat.)
        • Kaskadenmodus: Wenn beim Löschen und Aktualisieren von Fremdschlüsseln das Feld von der untergeordneten Tabelle verwendet wurde, werden die Daten in der untergeordneten Tabelle entsprechend aktualisiert (wenn beispielsweise eine Klassennummer geändert wird, wird die Klasse in der Schülertabelle entsprechend geändert; wenn eine Klasse gelöscht wird, werden alle Schüler in der entsprechenden Klasse gelöscht)
        • Nullmodus festlegen: Wenn beim Löschen und Aktualisieren von Fremdschlüsseln das Feld von der untergeordneten Tabelle verwendet wurde, werden die Fremdschlüsseldaten in der untergeordneten Tabelle auf Null gesetzt (wenn beispielsweise eine Klasse gelöscht wird, sollten nicht alle Schüler gelöscht werden, sondern zuerst auf Null gesetzt und dann einer Klasse neu zugewiesen werden). [Die Voraussetzung dafür, dass die untergeordnete Tabelle auf Null gesetzt wird, ist, dass das Feld Null sein darf.]
      • Tatsächlich können Sie verschiedene Modi für verschiedene Operationen angeben
      • Zusammenfassend (basierend auf meinen Beispielen) sind die geeigneten Maßnahmen in der Tat, es beim Löschen leer zu lassen (auch wenn eine Klasse zu schlecht ist und Sie sie löschen möchten, sollten Sie nicht alle Schüler daraus entfernen, sondern sie anderen Klassen zuweisen) und beim Ändern zu kaskadieren (so können Sie die Klassennummer ändern und die Änderungen werden für die Schüler aktualisiert).
      • So legen Sie unterschiedliche Modi für unterschiedliche Operationen fest (Operationen in untergeordneten Tabellen): Der Fremdschlüssel (Fremdschlüsselfeld) verweist im Operationsmodus auf die übergeordnete Tabelle (Primärschlüssel).
        Fremdschlüssel (Fremdschlüsselfeld) verweist beim Löschen auf die übergeordnete Tabelle (Primärschlüssel) und setzt bei der Update-Kaskade NULL; 
-- Experimentelle Tabellenstruktur, Tabellenklasse erstellen (
ID int Primärschlüssel auto_increment,
cname varchar(15)
);
Tabelle student2 erstellen(
ID int Primärschlüssel auto_increment,
Name varchar(15) nicht null,
Geschlecht varchar(10) nicht null,
cid int,
Fremdschlüssel (cid) verweist auf Klasse (id) beim Löschen, setzt Null beim Update-Kaskade
);
-- Daten der Versuchstabelle:
in Klasse (cname) einfügen Werte("Python"),("Linux"),("Java"),("html5");

einfügen in student2(name, geschlecht, cid) werte("Alice","weiblich",1);
einfügen in student2(name, geschlecht, cid) werte("John","weiblich",2);
einfügen in student2(name, geschlecht, cid) werte("Jack","weiblich",3);
einfügen in student2(name, geschlecht, cid) werte("Amy","weiblich",4);

wähle * aus Student2;
wähle * aus Klasse;
- Versuchen Sie, die Cascade-Update-Klassen-ID = 6 zu aktualisieren, wobei cname="python";
select * from student2; – Das ursprüngliche Python cid=6
- Versuchen Sie, aus der Klasse mit cname="java"; zu löschen und auf Null zu setzen.
select * from student2; -- Das Ergebnis ist das ursprüngliche Java cid=null

Auffüllen:

  • Sie müssen den Einschränkungsmodus richtig einstellen. Verwenden Sie in mehreren Untertabellen nicht unterschiedliche Einschränkungsmodi, da es sonst zu Konflikten kommt.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung von drei Beziehungsbeispielen für MySQL-Fremdschlüssel
  • Optimierung von Datentabellen in MySQL-Datenbanken, Analyse von Fremdschlüsseln und Nutzung von drei Paradigmen
  • Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen
  • Beispiele für allgemeine Operationen mit MySQL-Fremdschlüsseleinschränkungen [Anzeigen, Hinzufügen, Ändern, Löschen]
  • Gründe und Lösungen für das Fehlschlagen der Erstellung von Fremdschlüsseln durch MySQL
  • 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
  • MySQL fügt einen Fremdschlüsselfehler hinzu: 1215 Die Fremdschlüsseleinschränkungslösung kann nicht hinzugefügt werden
  • So verwenden Sie Fremdschlüssel in MySQL, um kaskadierendes Löschen und Aktualisieren zu implementieren
  • Lösung für Fremdschlüsselfehler bei der MySQL-Tabellenerstellung

<<:  Lösung für das Problem, dass der Server bei der Installation des Pagoda Panels keine Remoteverbindung zur Datenbank herstellen kann

>>:  js realisiert die Bildschneidefunktion

Artikel empfehlen

Zusammenfassung der Verwendung von vue Watch und Computed

Inhaltsverzeichnis 01. Hörer beobachten (1) Funkt...

Zwei Möglichkeiten zum Erstellen von Docker-Images

Inhaltsverzeichnis Aktualisieren Sie das Bild von...

Eine Zeile CSS-Code, die Chrome zum Absturz bringt

Allgemeiner CSS-Code verursacht nur geringfügige ...

Ausführliche Erklärung der Modi und Umgebungsvariablen in Vue CLI

Vorwort Bei der Entwicklung tatsächlicher Projekt...

So öffnen Sie das MySQL-Binlog-Protokoll

Binlog ist eine binäre Protokolldatei, die alle M...

Der Unterschied und die Verwendung von distinct und row_number() over() in SQL

1 Einleitung Wenn wir SQL-Anweisungen schreiben, ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.21

Notieren Sie die Installations- und Konfiguration...

Reiner CSS-Header, korrigierter Implementierungscode

Es gibt zwei Hauptgründe, warum es schwierig ist,...

Detaillierte Erklärung der GaussDB zur MySQL-Leistungsoptimierung

Inhaltsverzeichnis Hintergrund Inspiration kommt ...

Verwendung des optionalen Verkettungsoperators von JS

Vorwort Der optionale Verkettungsoperator (?.) er...

Detaillierte Erläuterung der Grundkenntnisse zur Front-End-Komponentenbildung

Inhaltsverzeichnis Grundlegende Konzepte von Komp...

HTML-Tabellen-Tag-Tutorial (25): vertikales Ausrichtungsattribut VALIGN

In vertikaler Richtung können Sie die Zeilenausri...

So importieren Sie Tomcat-Quellcode in Idea

Inhaltsverzeichnis 1. Laden Sie den Tomcat-Code h...

Verwendung des Linux-Dateibefehls

1. Befehlseinführung Der Dateibefehl wird verwend...