mysql Foreign-Key-Einschränkung ist fehlerhaft Fehler gebildet
Ich habe zwei Tabellen, table1
ist die übergeordnete Tabelle mit einer Spalte ID
und table2
mit einer Spalte IDFromTable1
(nicht den tatsächlichen Namen), wenn ich einen FK auf IDFromTable1
zu ID
im table1
bekomme ich die Fehlermeldung Foreign key constraint is incorrectly formed error
. Ich möchte zu löschen Tabelle 2-Datensatz, wenn table1
Datensatz gelöscht wird. Vielen Dank für jede Hilfe
ALTER TABLE `table2`
ADD CONSTRAINT `FK1`
FOREIGN KEY (`IDFromTable1`) REFERENCES `table1` (`ID`)
ON UPDATE CASCADE
ON DELETE CASCADE;
Lassen Sie mich wissen, wenn eine andere information benötigt wird. Ich bin neu in mysql
InformationsquelleAutor der Frage user516883 | 2011-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche problem mit HeidiSQL. Die Fehlermeldung, die Sie erhalten, ist sehr kryptisch. Mein problem war, dass die foreign-key-Spalte und die referenzierende Spalte wurden nicht von der gleichen Art oder Länge.
Den foreign-key-Spalte war
SMALLINT(5) UNSIGNED
wird und die referenzierte Spalte warINT(10) UNSIGNED
. Einmal habe ich Sie beide genau die gleiche Art, die foreign-key-Erstellung funktionierte perfekt.InformationsquelleAutor der Antwort Jake Wilson
Ich hatte das gleiche problem, wenn die parent-Tabelle erstellt wurde, verwenden
InnoDB
Motor. Es ist eine ganz dumme Fehler, die ich behoben mit:InformationsquelleAutor der Antwort Denis Malinovsky
stellen Sie sicher, dass die Spalten identisch sind(gleicher Typ) und wenn Spalte "Referenz" ist nicht
primary_key
stellen Sie sicher, es istINDEXED
.InformationsquelleAutor der Antwort Santosh
Syntax für die Definition von Fremdschlüssel ist sehr nachsichtig, aber für jemand anderen zu stolpern, bis auf die Tatsache, dass ausländische keys "der gleichen Art" gilt auch für die Sortierung, die nicht nur der Datentyp und die Länge und die bit-Signatur.
Nicht, dass du würdest mix Sortierung in Ihrem Modell (würdest du?) aber wenn Sie das tun, werden Sie sicher, dass Ihr primär-und Fremdschlüssel-Felder sind von der gleichen Sortierung geben Sie in phpmyadmin oder Heidi-SQL oder was auch immer Sie verwenden.
Hoffe, dies spart Ihnen die vier Stunden von Versuch und Irrtum, es kostete mich.
InformationsquelleAutor der Antwort user2297047
Nur für die Fertigstellung.
Dieser Fehler kann auch dann der Fall, wenn Sie einen Fremdschlüssel VARCHAR(..) und den Zeichensatz des referenzierten Tabelle unterscheidet sich von der Tabelle verweisen.
z.B. VARCHAR(50) in einer Latin1-Tabelle anders ist als VARCHAR(50) in einer UTF8-Tabelle.
InformationsquelleAutor der Antwort S Doering
Hatte ich gleiche problem, aber gelöst.
Nur stellen Sie sicher, dass die Spalte 'ID' in 'Tabelle1' hat EINZIGARTIGE index!
Und, natürlich, die Art, die Länge der Spalten 'ID' und 'IDFromTable1" in diesen beiden Tabellen müssen identisch sein. Aber Sie wissen bereits, über.
InformationsquelleAutor der Antwort Renat Gatin
mysql-Fehler-Texte helfen nicht so viel, in meinem Fall, die Spalte hatte, "not null" - constraint, also das "on delete set null" nicht erlaubt war,
InformationsquelleAutor der Antwort Luca C.
wenn alles ok ist, fügen Sie einfach
->unsigned();
am Endeforegin key
.wenn es nicht funktioniert, überprüfen Sie den Datentyp der beiden Felder. Sie muss die gleiche sein.
InformationsquelleAutor der Antwort josef
Versuchen Sie Folgendes:
InformationsquelleAutor der Antwort Sudhir Bastakoti
Ich hatte das gleiche Problem mit Symfony 2.8.
Habe ich nicht bekommen, es auf den ersten, denn es gab keine ähnliche Probleme mit int length of foreign keys etc.
Schließlich hatte ich zu tun das folgende, in dem Projekt-Ordner. (Ein server-Neustart hat nicht geholfen!)
app/console doctrine:cache:clear-metadata
app/console doctrine:cache:clear-query
app/console doctrine:cache:clear-result
InformationsquelleAutor der Antwort rogaa
Dank S Doerin:
"Nur für die Fertigstellung.
Dieser Fehler kann auch dann der Fall, wenn Sie einen Fremdschlüssel VARCHAR(..) und den Zeichensatz des referenzierten Tabelle unterscheidet sich von der Tabelle verweisen.
z.B. VARCHAR(50) in einer Latin1-Tabelle anders ist als VARCHAR(50) in einer UTF8-Tabelle."
löste ich dieses problem, die änderung der Art der Zeichen in der Tabelle.
die Schöpfung latin1 und die richtige ist utf8.
fügen Sie die nächste Zeile.
DEFAULT CHARACTER SET = utf8;
InformationsquelleAutor der Antwort Bladimir Arias Sabogal
Hatte ich Probleme mit Alter table zum hinzufügen einer foreign key-zwischen zwei Tabellen und die Sache, dass mir geholfen wurde, machen Sie sicher, dass jede Spalte, die ich habe versucht, fügen Sie eine Fremdschlüsselbeziehung indiziert wurde. Um dies in PHP-myAdmin:
Gehen Sie zu der Tabelle und klicken Sie auf die Registerkarte "Struktur".
Klicken Sie auf die option index, index der gewünschten Spalte, wie gezeigt in der Abbildung:
Sobald ich indizierten beiden Spalten, die ich versucht habe, zu verweisen, mit meinem foreign keys, ich war in der Lage, erfolgreich verwenden Sie die alter table aus und erstellen Sie die Fremdschlüssel-Beziehung. Sie werden sehen, dass die Spalten indiziert sind, wie in der folgenden screenshot zu sehen:
bemerken, wie zip_code zeigt sich in beiden Tabellen.
InformationsquelleAutor der Antwort Chris Adams
Hatte ich die gleichen Probleme.
Das Problem ist die Spalte "Referenz" ist kein primary key.
Machen es zu einem primary key und problem ist gelöst.
InformationsquelleAutor der Antwort longluffy
Müssen Sie überprüfen, dass beide identisch in allen seinen Eigenschaften, einschließlich in "Sortierung"
InformationsquelleAutor der Antwort CrsCaballero
Überprüfen Sie die Tabellen-engine, beide Tabellen haben die gleiche engine, das hat mir geholfen, so viel.
InformationsquelleAutor der Antwort mariobigboy
War ich mit HeidiSQL und um dieses problem zu lösen musste ich erstellen Sie einen index in der referenzierten Tabelle mit allen Spalten verwiesen wird.
InformationsquelleAutor der Antwort Doug
Eine weitere mögliche Ursache für die Anzeige dieses Fehlers. Die Reihenfolge, in der ich war, erstellen von Tabellen falsch war. Ich habe versucht, auf ein-Taste aus einer Tabelle, die wurde noch nicht erstellt.
InformationsquelleAutor der Antwort Kaya Toast
Ich hatte das gleiche Problem mit Laravel 5.1 migration-Schema-generator mit MariaDB 10.1.
Das Problem war, dass ich eingegeben habe
unigned
stattunsigned
(dies
Buchstabe fehlte) während der Einstellung der Spalte.Nach Festsetzung der typo Fehler wurde behoben für mich.
InformationsquelleAutor der Antwort Arda
Obwohl die anderen Antworten sind sehr hilfreich, wollte nur meine Erfahrung mitteilen, wie gut.
Ich Stand vor dem Problem, wenn ich gelöscht hatte einer Tabelle, deren
id
wurde bereits referenziert als Fremdschlüssel in anderen Tabellen (mit Daten) und versucht neu zu erstellen/importieren die Tabelle mit zusätzlichen Spalten.Die Abfrage für die Erholung (generiert, in phpMyAdmin) sah wie folgt aus:
Wie Sie bemerken können, die
PRIMARY KEY
index gesetzt wurde nach der Gründung (und einfügen von Daten) das war das problem verursacht.Lösung
War die Lösung, fügen Sie die
PRIMARY KEY
index auf Tabelle (definition query) für dieid
die referenziert als Fremdschlüssel, während auch das entfernen es aus derALTER TABLE
Teil, wo die Indizes wurden:InformationsquelleAutor der Antwort Ahmad Baktash Hayeri
Sogar ich lief in das gleiche Problem mit mysql und liquibase.
Also das ist, was das problem ist:
Die Tabelle, die Sie referenzieren möchten eine Spalte der anderen Tabelle, das ist unterschiedlich, entweder bei Datentyp oder in Bezug auf die Größe des Datentyps.
InformationsquelleAutor der Antwort ashish kathait
Ich verlor für Stunden!
PK in einer Tabelle war
utf8
im anderen warutf8_unicode_ci
!InformationsquelleAutor der Antwort LukTar
Ich hatte das gleiche Problem, beide Säulen wurden INT(11) not NULL, aber ich wan ' T in der Lage, erstellen Sie die Fremdschlüssel.
Ich hatte zu deaktivieren, Fremdschlüssel überprüft, führen Sie es erfolgreich :
Hoffe, das jemand hilft.
InformationsquelleAutor der Antwort Takman
Überprüfen, die Sie angegeben haben, der name der Tabelle in der richtigen Fall (wenn die Tabellen-Namen sind case-Sensitiv in der Datenbank). In meinem Fall musste ich ändern
zu
Hinweis: die
customer
geändertCUSTOMER
.InformationsquelleAutor der Antwort izogfif
wenn Sie phpMyadmin verwenden, die Sie überspringen können Sie das problem durch deaktivieren Sie "Enable foreign key checks" - dann können Sie importieren Sie die Tabellen ohne Behebung des Problems.
sicher, es gibt eine Möglichkeit zum überspringen Sie die foreign key checks mit dem mySql-CLI
InformationsquelleAutor der Antwort yehonatan yehezkel
Oder Sie können mit DBDesigner4, die hat eine grafische Oberfläche zu erstellen, die Ihre Datenbank und die Verknüpfung mit FK. Der rechten Maustaste auf die Tabelle und wählen Sie "Tabelle Kopieren, SQL Create" erstellt den code.
InformationsquelleAutor der Antwort TheHive
(Letzte Übel) Auch wenn der Feldname und Datentyp ist der gleiche, aber die Sortierung ist nicht das gleiche, es führt auch zu diesem problem.
Beispielsweise
Versuchen Sie es in
....
Dieser arbeitete für mich.
InformationsquelleAutor der Antwort Jimwel Anobong