Ich versuche eine Datenbank für das Fitness-Studio-Management-System zu erstellen, aber ich kann nicht herausfinden, warum ich diesen Fehler bekomme. Ich habe versucht, hier nach der Antwort zu suchen, aber ich konnte es nicht finden.
%Vor%Hier sind die übergeordneten Tabellen.
%Vor% Können Sie mir bei diesem Problem helfen? Danke. Damit ein Feld als foreign key
definiert wird, muss im übergeordneten Feld, auf das verwiesen wird, ein Index definiert sein.
Laut Dokumentation zu foreign key
constraints:
REFERENCES parent_tbl_name (index_col_name, ...)
Definieren Sie eine INDEX
für workouts.workoutName
, paymentFor.paymentName
bzw. supplements.supplementName
. Und stellen Sie sicher, dass untergeordnete Spaltendefinitionen mit denen ihrer übergeordneten Spaltendefinitionen übereinstimmen müssen.
Ändern Sie workouts
-Tabellendefinition wie folgt:
Ändern Sie supplements
-Tabellendefinition wie folgt:
Ändern Sie paymentFor
-Tabellendefinition wie folgt:
Ändern Sie nun die untergeordnete Tabellendefinition wie folgt:
%Vor%Siehe :
[CONSTRAINT [Symbol]] FREMDSCHLÜSSEL
[index_name] (index_col_name, ...)
REFERENZEN tbl_name (index_col_name, ...)
[ON DELETE reference_option]
[ON UPDATE reference_option]reference_option:
BESCHRÄNKUNG | CASCADE | SET NULL | KEINE AKTION
Wenn Sie jemals herausfinden wollen, warum dieser Fehler aufgetreten ist, müssen Sie nur den folgenden Befehl ausführen und nach " NEUESTE AUSSENSCHLÜSSELFEHLER "
suchenBefehl zum Ausführen: -
%Vor%Sie werden den Grund für Ihre Fehler kennen.
Fremdschlüssel sind eine Möglichkeit, Beziehungen / Einschränkungen zwischen Spalten in verschiedenen Tabellen zu implementieren.
Es gibt verschiedene Kategorien von Einschränkungen, die beeinflussen, wie sie erzwungen werden, wenn eine Zeile aus der übergeordneten Tabelle aktualisiert oder gelöscht wird:
◾ Cascade
: Wenn eine Zeile vom übergeordneten Element gelöscht wird, werden auch alle Zeilen in der untergeordneten Tabelle mit einem passenden FK-Wert gelöscht. Ähnlich für Änderungen des Werts in der übergeordneten Tabelle.
◾ Restrict
: Eine Zeile kann nicht aus der übergeordneten Tabelle gelöscht werden, wenn dadurch eine FK-Einschränkung mit der untergeordneten Tabelle aufgehoben würde. Ähnlich für Änderungen des Werts in der übergeordneten Tabelle.
◾ No Action
: Sehr ähnlich wie "Restrict", außer dass alle Ereignisse / Trigger in der übergeordneten Tabelle ausgeführt werden, bevor die Einschränkung erzwungen wird. Dadurch erhält der Anwendungs-Writer die Option, alle FK-Constraint-Konflikte mithilfe einer gespeicherten Prozedur aufzulösen.
◾ Set NULL
: Wenn NULL ein zulässiger Wert für die FK-Spalte in der untergeordneten Tabelle ist, wird er auf NULL gesetzt, wenn die zugehörigen Daten in der übergeordneten Tabelle aktualisiert oder gelöscht werden.
◾ Set Default
: Wenn es einen Standardwert für die FK-Spalte in der untergeordneten Tabelle gibt, wird diese verwendet, wenn die zugehörigen Daten in der übergeordneten Tabelle aktualisiert oder gelöscht werden. Beachten Sie, dass dies in dieser Version nicht implementiert ist. Die Einschränkung kann dem Schema hinzugefügt werden, aber ein nachfolgendes Löschen oder Aktualisieren der Spalte in der übergeordneten Tabelle schlägt fehl.
Manchmal wird der Fehler "# 1215 - Fremdschlüssel-Integritätsbedingung nicht hinzufügen" wegen der Fehlertabelle der Tabelle TYPE (InnoDB, MyISAM, ..) angezeigt.
Ändern Sie also den Tabellentyp in selbe und versuchen Sie, die Fremdschlüsseleinschränkung anzuwenden
mysql> ALTER TABLE table_name ENGINE=InnoDB;
mysql> ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Ich habe den gleichen Fehler bekommen. Der Grund war, dass ich mich auf eine Spalte in einer Tabelle bezog, die mit dem Zeichensatz utf8 aus einer Tabelle erstellt wurde, die mit dem Zeichensatz latin erstellt wurde.
Die Tabellen, die mit dem mySQL-Workbench create table-Dienstprogramm erstellt wurden, haben den Standardzeichensatz latin.
Eine einfache Vorgehensweise, um dies herauszufinden, wenn Sie Workbench verwenden, ist das Anzeigen der Tabelle create-Anweisung einer beliebigen Tabelle. Sie werden am Ende die Standardzeichenfolge haben.
Ich stoße auf diesen Fehler. Ich füge eine Fremdschlüsseleinschränkung für eine Spalte hinzu, die eine 'not null constraint' hat, aber ich habe 'on delete set null' in der Fremdbedingung angegeben. Dies ist ein Widerspruch, der auf den ersten Blick nicht offensichtlich ist.
Hier sind meine zwei Tabellen:
%Vor%Wenn Sie die Einschränkung NOT NULL für die Spalte study_id in der Tabelle client_study entfernen, kann der Fremdschlüssel hinzugefügt werden. Die andere Alternative besteht darin, die Nicht-NULL-Einschränkung für die Tabelle client_table beizubehalten, aber die Definition des Fremdschlüssels in die Einstellung delete no action oder andere Optionen zu ändern.
Tags und Links mysql foreign-keys