shopfreephoenix.com

  

Beste Artikel:

  
Main / Ref Fehler beim Löschen von Zeilen MySQL verhindern

Verhindern Sie Ref-Fehler beim Löschen von Zeilen MySQL

MySQL unterstützt Fremdschlüssel, mit denen Sie verwandte Daten über Tabellen hinweg verweisen können, sowie Fremdschlüsseleinschränkungen, mit denen diese verteilten Daten konsistent bleiben. Andernfalls erstellt MySQL implizit einen Fremdschlüsselindex, der nach den folgenden Regeln benannt wird: Fremdschlüsselbeziehungen umfassen eine übergeordnete Tabelle, die die zentralen Datenwerte enthält, und eine untergeordnete Tabelle mit identischen Werten, die auf die übergeordnete Tabelle verweisen.

Die übergeordneten und untergeordneten Tabellen müssen dieselbe Speicher-Engine verwenden. In MySQL 8. Entsprechende Spalten im Fremdschlüssel und im referenzierten Schlüssel müssen ähnliche Datentypen haben. Die Größe und das Vorzeichen von Ganzzahltypen müssen identisch sein. Die Länge der Zeichenfolgentypen muss nicht gleich sein. Bei nicht-binären Zeichenkettenspalten müssen Zeichensatz und Sortierung identisch sein. MySQL erfordert Indizes für Fremdschlüssel und Schlüssel, auf die verwiesen wird, damit Fremdschlüsselprüfungen schnell durchgeführt werden können und kein Tabellenscan erforderlich ist.

In der Referenzierungstabelle muss ein Index vorhanden sein, in dem die Fremdschlüsselspalten als erste Spalten in derselben Reihenfolge aufgeführt sind. Ein solcher Index wird automatisch für die Referenzierungstabelle erstellt, wenn er nicht vorhanden ist. Dieser Index wird möglicherweise später stillschweigend gelöscht, wenn Sie einen anderen Index erstellen, mit dem die Fremdschlüsseleinschränkung erzwungen werden kann.

InnoDB erlaubt einem Fremdschlüssel, auf eine beliebige Indexspalte oder Spaltengruppe zu verweisen. In der referenzierten Tabelle muss jedoch ein Index vorhanden sein, in dem die referenzierten Spalten die ersten Spalten in derselben Reihenfolge sind. NDB erfordert einen expliziten eindeutigen Schlüssel oder Primärschlüssel für jede Spalte, die als Fremdschlüssel bezeichnet wird.

Indexpräfixe für Fremdschlüsselspalten werden nicht unterstützt. Eine Folge davon ist, dass BLOB- und TEXT-Spalten nicht in einem Fremdschlüssel enthalten sein können, da Indizes für diese Spalten immer eine Präfixlänge enthalten müssen.

Ein doppeltes Symbol führt zu einem Fehler ähnlich dem folgenden: FEHLER 1022 2300: InnoDB unterstützt derzeit keine Fremdschlüssel für Tabellen mit benutzerdefinierter Partitionierung.

Dies umfasst sowohl übergeordnete als auch untergeordnete Tabellen. Referenzaktionen. Beispiele für Fremdschlüsselklauseln. Hinzufügen von Fremdschlüsseln. Löschen von Fremdschlüsseln. Fremdschlüssel-Metadaten. Fremdschlüsselfehler. In diesem Abschnitt wird beschrieben, wie Fremdschlüssel die referenzielle Integrität gewährleisten. MySQL unterstützt fünf Optionen bezüglich der auszuführenden Aktion, die hier aufgeführt sind: Löschen oder aktualisieren Sie die Zeile aus der übergeordneten Tabelle und löschen oder aktualisieren Sie automatisch die übereinstimmenden Zeilen in der untergeordneten Tabelle. Löschen oder aktualisieren Sie die Zeile aus der übergeordneten Tabelle und setzen Sie die Fremdschlüsselspalte oder -spalten in der untergeordneten Tabelle auf NULL.

Lehnt den Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle ab. Ein Schlüsselwort aus Standard-SQL. Der MySQL Server lehnt den Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle ab, wenn die referenzierte Tabelle einen zugehörigen Fremdschlüsselwert enthält.

MySQL unterstützt Fremdschlüsselreferenzen zwischen einer Spalte und einer anderen innerhalb einer Tabelle. Eine Spalte darf keinen Fremdschlüsselverweis auf sich selbst haben. Hier ist ein einfaches Beispiel, das übergeordnete und untergeordnete Tabellen über einen einspaltigen Fremdschlüssel verknüpft: Ein Fremdschlüssel verweist auf einen zweispaltigen Index in der Produkttabelle. Der andere verweist auf einen einspaltigen Index in der Kundentabelle:

Die Syntax für Fremdschlüssel für diese Anweisung wird hier gezeigt: Der Fremdschlüssel kann selbstreferenziell sein und sich auf dieselbe Tabelle beziehen.

Dies vermeidet Probleme mit Tabellen, die beim erneuten Laden des Speicherauszugs in einer bestimmten Reihenfolge neu geladen werden müssen. Es ist auch möglich, diese Variable manuell einzustellen:

Auf diese Weise können Sie die Tabellen in beliebiger Reihenfolge importieren, wenn die Speicherauszugsdatei Tabellen enthält, die für Fremdschlüssel nicht korrekt sortiert sind. Es beschleunigt auch den Importvorgang. Um die Speicher-Engine zu ändern, müssen Sie zuerst alle Fremdschlüsseleinschränkungen löschen. Wenn Sie eine Tabelle löschen, werden auch alle Einschränkungen gelöscht, die in der Anweisung zum Erstellen dieser Tabelle definiert wurden. Wenn Sie eine Tabelle neu erstellen, die gelöscht wurde, muss sie eine Definition haben, die den Fremdschlüsseleinschränkungen entspricht, auf die sie verweist.

Es muss die richtigen Spaltennamen und -typen haben und Indizes für die Schlüssel, auf die verwiesen wird, wie bereits erwähnt. Wenn diese nicht erfüllt sind, gibt MySQL Fehler 1005 zurück und verweist in der Fehlermeldung auf Fehler 150, was bedeutet, dass eine Fremdschlüsseleinschränkung nicht korrekt gebildet wurde. MySQL erweitert Metadatensperren nach Bedarf auf Tabellen, die durch eine Fremdschlüsseleinschränkung verknüpft sind. Diese Funktion ermöglicht auch Aktualisierungen von Fremdschlüssel-Metadaten, wenn eine übergeordnete Tabelle geändert wird.

In früheren MySQL-Versionen konnten Fremdschlüssel-Metadaten, deren Eigentümer die untergeordnete Tabelle ist, nicht sicher aktualisiert werden. In diesem Fall darf die untergeordnete Tabellenzeile, die einen solchen Fremdschlüssel enthält, eingefügt werden und stimmt mit keiner Zeile in der übergeordneten übergeordneten Tabelle überein.

Es ist möglich, andere Semantiken mithilfe von Triggern zu implementieren. Darüber hinaus erfordert MySQL, dass die Spalten, auf die verwiesen wird, aus Leistungsgründen indiziert werden. Wenn dieser Benutzer über Berechtigungen für übergeordnete Tabellen auf Tabellenebene verfügt, werden weiterhin Informationen zu übergeordneten Tabellen angezeigt. In diesem Fall liegt es in der Verantwortung des Erstellers des gespeicherten Programms, die Informationen durch Einfügen geeigneter Bedingungshandler auszublenden.

Datendefinitionsanweisungen. Unterstützung für Atomic Data Definition-Anweisungen. WIE Syntax. Änderungen der stillen Spaltenspezifikation. Sekundärindizes und generierte Spalten. Datenmanipulationsanweisungen. Die Unterabfrage als Skalaroperand. Vergleiche mit Unterabfragen. Umschreiben von Unterabfragen als Joins. Transaktions- und Sperranweisungen. Anweisungen, die ein implizites Commit verursachen.

Funktion, die die primäre Gruppenreplikation konfiguriert. Funktionen, die den Gruppenreplikationsmodus konfigurieren. Syntax für zusammengesetzte Anweisungen. Variablen in gespeicherten Programmen. Umfang und Auflösung der lokalen Variablen. Flusskontrollanweisungen. Datenbankverwaltungsanweisungen.

Kontoauszugsanweisungen. Anweisungen zur Verwaltung von Ressourcengruppen. Tabellenwartungsanweisungen. Sonstige Verwaltungserklärungen. Fehler, Fehlercodes und häufige Probleme. MySQL 8.

(с) 2019 shopfreephoenix.com