MySQL: Can ' T create table (errno: 150)
Ich versuche zu importieren .sql-Datei und deren scheitern auf das erstellen von Tabellen.
Hier ist die Abfrage, die fehlschlägt:
CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Ich exportiert .sql aus der gleichen Datenbank, ließ ich alle Tabellen, und jetzt bin ich versucht, zu importieren, wieso ist es aufgetreten?
MySQL: Can ' T create table './Datenbankname/Daten.frm' (errno: 150)
Für im wesentlichen alle der Ursachen dieses Fehlers, hier ist eine umfassende Ressource für das, was bewirkt, dass errno 150 (und errno 121/other foreign key Fehler) in MySQL.
Ich habe festgestellt, dass die Spalten müssen identisch sein (auch das unsigned-Kennzeichen übereinstimmen muss).
wo?
Ich schlage vor, Lesen Sie dieses blog-post, die Listen 10 mögliche Ursachen: verysimple.com/2006/10/22/...
Verflucht!
Ich habe festgestellt, dass die Spalten müssen identisch sein (auch das unsigned-Kennzeichen übereinstimmen muss).
wo?
Ich schlage vor, Lesen Sie dieses blog-post, die Listen 10 mögliche Ursachen: verysimple.com/2006/10/22/...
Verflucht!
InformationsquelleAutor gtilx | 2010-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der MySQL - FOREIGN KEY-Constraints-Dokumentation:
Jede der beiden Spalten kann über eine Fremdschlüsselbeziehung auf die PK in einer anderen Tabelle -- nicht beide Spalten als einzigen Fremdschlüssel-Beziehung.
Vielen Dank für die Beantwortung dieser Frage!..Ich war auf der Suche für Sie...ich habe auch gebeten, hier eine Frage stackoverflow.com/questions/13487010/... ....Ich habe zwar einige gute Antworten, aber ich möchte, um konform
Whether its possible to write Nested Query for my problem
? ..Würde ich Sie bitten, bitte beantworten Sie mir auch!Mein Fehler war master-Tabelle von MyISAM-und child-Tabelle von InnoDB-engine. Aktuellen erstellen.sql-script wurde mit InnoDB für Tabellen, aber ich hatte sehr, sehr alte installation, bei der ersten Skript verwendet MyISAM.
Yep, lief in das gleiche Problem hier.
InformationsquelleAutor OMG Ponies
Fehler 150 bedeutet, Sie haben ein problem mit dem Fremdschlüssel. Möglicherweise ist die Taste auf der fremden Tabelle ist nicht die exakt gleiche Art?
Ich habe oft laufen über
BIGINT
vsINT
bei der Verwendung von schema-Generatoren.Ich lief in das gleiche Problem beim Fremdschlüssel ist kein INT-Wert. Die Spalte müssen EINDEUTIG sein, wenn der Fremdschlüssel verweist.
InformationsquelleAutor Dan McGrath
Können Sie das eigentliche Fehlermeldung durch ausführen
SHOW ENGINE INNODB STATUS;
und dann suchenLATEST FOREIGN KEY ERROR
in der Ausgabe.Quelle: Antwort von einem anderen user eine ähnliche Frage
danke. Es ist eine Schande, MySQL-Workbench nicht benutzen.
Genial. Dies ist so hilfreich. Weist du den genauen Fehler. Mir war, zu haben, haben die Spalte null-Werte zulässt, aber gesetzt hatten, "on delete set null". Ich danke Ihnen so sehr.
InformationsquelleAutor Denilson Sá Maia
Datentypen müssen exakt übereinstimmen. Wenn Sie sind den Umgang mit varchar-Typen, die Tabellen müssen die gleiche Sortierung.
InformationsquelleAutor Esben Skov Pedersen
Ich denke, alle diese Antworten, die zwar korrekt sind irreführend auf die Frage.
Die eigentliche Antwort ist diese, bevor Sie eine Wiederherstellung starten, wenn Sie die Wiederherstellung einer dump-Datei mit dem Fremdschlüssel:
weil natürlich die Wiederherstellung wird einige Einschränkungen vor, die ausländischen-Tabelle auch vorhanden ist.
InformationsquelleAutor colin
In einigen Fällen, können Sie auf diese Fehlermeldung, wenn es verschiedene Motoren, die zwischen den entsprechenden Tabellen. Zum Beispiel, eine Tabelle mit InnoDB, während die andere nutzt MyISAM. Beide müssen gleich sein
Das war mein Problem. Dank
Dies kann passieren, wenn Sie erstellt eine sql-Datei aus innodb-Tabelle mit mysqldump und Sie exportiert wurden als myisam talbes statt.
InformationsquelleAutor pi.
Fehler nicht. 150 bedeutet eine foreign key-Einschränkung Versagen. Sie sind wahrscheinlich die Erstellung dieser Tabelle, bevor die Tabelle, die den Fremdschlüssel abhängt (Tabelle
keywords
). Erstellen Sie die Tabelle zum ersten mal und es sollte funktionieren.Wenn es nicht, entfernen Sie die foreign key-Anweisung und fügen Sie ihn nach der Tabelle erstellt - Sie erhalten eine aussagekräftige Fehlermeldung über die spezifischen Einschränkung Versagen.
InformationsquelleAutor Eran Galperin
Es gibt durchaus ein paar Dinge, die verursachen können, errno 150, also für Menschen auf der Suche dieses Thema, hier ist was ich denke, ist eine nahe zu vollständige Liste (Quelle Ursachen von Errno 150):
Für errno 150 oder errno 121, einfach eingeben in SHOW ENGINE INNODB STATUS, gibt es einen Abschnitt namens "LATEST FOREIGN KEY FEHLER". Unter, dass es wird Ihnen eine sehr hilfreiche Fehlermeldung, die in der Regel sagen Sie sofort, was Los ist. Sie müssen SUPER-Privilegien ausgeführt werden, also, wenn Sie das nicht haben, müssen Sie nur zu testen, die folgende Szenarien.
1) Datentypen nicht Übereinstimmen: Die Datentypen der Spalten müssen gleich sein
2) Parent-Spalten Nicht Indiziert (Oder Indiziert in Falscher Reihenfolge)
3) Spalte Sortierungen nicht Übereinstimmen
4) Mit SET NULL in eine not NULL-Spalte
5) Tabelle Sortierungen nicht Übereinstimmen: auch wenn die Spalte Sortierungen überein, bei einigen MySQL-Versionen kann dies ein problem sein.
6) Parent-Spalte den es Eigentlich nicht gibt In der Übergeordneten Tabelle. Prüfen Sie die Rechtschreibung (und vielleicht ein Leerzeichen am Anfang oder Ende der Spalte)
7) Einer der Indizes in einer der Spalten unvollständig ist, oder die Spalte ist zu lang für einen vollständigen index. Beachten Sie, dass MySQL (es sei denn, Sie optimieren) hat eine maximale einzelne Spalte eine Schlüssellänge von 767 bytes (dies entspricht einer varchar(255), UTF-Spalte)
In Fall erhalten Sie eine errno 121, hier sind ein paar Ursachen:
1) Die Einschränkung name, den Sie gewählt hat, ist bereits genommen
2.) Auf manchen Systemen, wenn es ein Fall ist, der Unterschied in deiner Aussage und Tabellennamen. Dies kann beißen, wenn Sie wechseln von einem server zum anderen, die verschiedenen Fall-handling Regeln.
Danke, das war toll: | ------------------------ | die LETZTE FOREIGN KEY FEHLER| ------------------------ | Sie haben FESTGELEGT, NULL, Zustand, obwohl einige der | Spalten als not NULL definiert.
InformationsquelleAutor juacala
Manchmal MySQL ist einfach super dumm - ich kann verstehen, dass die Grund-Ursache der foreign-keys.. aber in meinem Fall, ich habe gerade fiel die gesamte Datenbank, und ich bekomme immer noch die Fehlermeldung... warum? ich meine, es gibt keine Datenbank mehr... und die sql-user benutze ich kein Zugriff auf andere db ' s auf dem server... ich meine, die server "leer" für den aktuellen Benutzer und ich bekomme immer noch diesen Fehler? Sorry, aber ich denke MySQL ist lügt mich an... aber ich kann damit umgehen 🙂 Nur fügen Sie diese zwei Zeilen von SQL um Ihre fucky-Anweisung:
Nun die sql ausgeführt werden soll,... Wenn du wirklich ein foreign-key-problem, es würde zeigen, bis Sie durch die Linie, wo Sie ermöglichen, dass die Prüfungen wieder - dieser wird dann fehl.. aber mein server ist gerade ruhig 🙂
Interessante Einblicke @juacala 🙂 für mich Komisch ist nur, wenn ich lief in dieses, mein Ansatz immer fester... bis heute zumindest 😀 Aber wir nie aufhören zu lernen, richtig 😉
Diese tatsächlich half mir mit einem script liquibase generiert. Das script lief einwandfrei auf MySQL > 5.5, aber nicht für die version 5.1.
InformationsquelleAutor jebbie
Nach Kreuzfahrt durch die Antworten oben, und Experimentieren ein wenig, dies ist eine effektive Art und Weise zu lösen Foreign Key Fehler in MySQL (1005 - Fehler 150).
Für die Fremdschlüssel korrekt angelegt, alle MySQL verlangt wird:
Diese Anforderungen erfüllen, und alles wird gut.
InformationsquelleAutor Davies Malesi
Erlebte ich diesen Fehler wenn haben portierte Windows-Anwendung auf Linux. In Windows -, Datenbank-Tabellennamen die groß- /Kleinschreibung, und bei Linux auf die groß-und Kleinschreibung, wahrscheinlich, weil der Datei-system Unterschied. Also, auf Windows Tabelle
Table1
ist das gleiche wietable1
, und inREFERENCES
beidetable1
undTable1
funktioniert. Auf Linux, wenn die Anwendung verwendettable1
stattTable1
beim erstellen der Datenbank-Struktur, die ich sah Fehler #150; wenn ich die korrekte groß-und Kleinschreibung inTable1
Referenzen, begann es zu arbeiten, auch unter Linux. Also, wenn sonst nichts hilft, stellen Sie sicher, dass inREFERENCES
verwenden Sie korrekte groß-und Kleinschreibung in der Tabelle Namen, wenn Sie auf Linux.InformationsquelleAutor Vitaliy
Ändern die Motoren Ihre Tabellen nur innoDB unterstützt foreign keys
InformationsquelleAutor Lappies
Wenn der PK-Tabelle erstellt, in einem CHARSET und erstellen Ihnen dann FK-Tabelle in ein anderes CHARSET..denn auch Sie könnten diese Fehler...auch ich habe diesen Fehler aber nach dem ändern der Zeichenkodierung PK charset dann ging es ohne Fehler ausgeführt
InformationsquelleAutor tinku
Dieser Fehler kann auftreten, wenn zwei Tabellen eine Referenz, zum Beispiel in einer Tabelle der Student ist und eine weitere Tabelle ist die Bildung, und wir wollen, dass die Bildung Tabelle über einen Fremdschlüssel Verweis auf Tabelle Student. In diesem Beispiel wird der Datentyp der Spalte für die beiden Tabellen sollten identisch sein, sonst wird ein Fehler generiert.
InformationsquelleAutor manzarul haque
In den meisten Fällen das problem ist, weil der MOTOR Unterschied .Wenn das übergeordnete Element erstellt von InnoDB dann die referenzierten Tabellen sollen geschaffen werden, indem MyISAM - & Umgekehrt
InformationsquelleAutor Sunil Kumar Mohanty
In meinem Fall. Ich hatte Probleme mit Motor und charset, da mein Hosting-server-Einstellungen ändern und meinem neuen MyISAM-Tabellen wurde aber meine alten Tabellen sind InnoDB. Nur habe ich geändert.
InformationsquelleAutor Ignacio Hernández
Den foreign key müssen die gleichen Datentyp als Primärschlüssel. Auch, wenn die Primärschlüssel ist unsigned dann die foreign key muss auch unsigned.
InformationsquelleAutor Rakesh
Hatte ich dasselbe Problem. Es wurde im Zusammenhang mit der Tabelle, Spalte Sortierung und Zeichensatz.
Stellen Sie sicher, Zeichensatz und Sortierung muss gleich sein für beide Spalten auf zwei Tabellen. Wenn Sie möchten, um einen foreign key auf die.
Beispiel - Wenn Sie Fremdschlüssel userID-Spalte von userImage Tabelle verweisen auf Spalte userID der Benutzer-Tabelle.Dann Sortierung muss gleich sein, dass ist utf8_general_ci und Zeichensatz utf8 für beide Spalten der Tabellen. Im Allgemeinen, wenn Sie eine Tabelle erstellen, mysql nimmt diese beiden die Konfiguration von server-Einstellungen.
InformationsquelleAutor Sushilkumar
Bitte stellen Sie sicher, dass Ihre primary key-Spalte und eine Spalte haben die gleichen Datentypen und Attribute (unsigned, binary, unsigned zerofill etc).
InformationsquelleAutor Basit
Einem echten edge-Fall ist, wo Sie verwendet haben, eine MySQL-tool (Fortsetzung von Pro in meinem Fall) um eine Datenbank umzubenennen. Dann erstellten Sie eine Datenbank mit dem gleichen Namen.
Aufbewahrt foreign key-Einschränkungen auf der gleichen Datenbank-Namen, also die umbenannte Datenbank (z.B. my_db_renamed) hatte die foreign key-Einschränkung in die neu erstellte Datenbank (my_db)
Nicht sicher, ob das ein bug in Sequel Pro, oder wenn einzelne Anwendungsfall erfordert dieses Verhalten, aber es kostete mich beste Teil des morgens :/
InformationsquelleAutor chim
Ich hatte den gleichen Fehler. In meinem Fall der Grund für den Fehler war, dass ich hatte eine ON DELETE SET NULL-Anweisung in der Einschränkung während das Feld, auf dem ich die Einschränkung in der definition musste eine not NULL-Aussage. Erlaubt NULL-Wert im Feld das problem gelöst.
InformationsquelleAutor Wilbert van Diemen
Ich konfrontiert diese Art von Problem während der Erstellung DB aus der Textdatei.
Ich schrieb die obigen Zeilen in
Create.bat
und führen Sie die bat-Datei.Mein Fehler in der Reihenfolge der Ausführung in meiner sql-Dateien. Ich habe versucht, zu erstellen, die Tabelle mit dem Primärschlüssel auch Fremdschlüssel. Während dessen läuft, wird die Suche nach der Referenz-Tabelle, aber Tabellen sind nicht da.
So wird es wieder diese Art von Fehler.
InformationsquelleAutor Dharani Dharan
Ich hatte ein ähnliches problem, aber mir war, weil ich das hinzufügen ein neues Feld zu einer vorhandenen Tabelle, die Daten , und das neue Feld wurde verweisen auf ein anderes Feld aus der übergeordneten Tabelle und hatte auch die Festlegung von NICHT NULL und ohne DEFAULT-WERTE. - Ich fand heraus, der Grund, waren die Dinge nicht arbeiten war, weil
Es ist wichtig, daran zu erinnern, dass unter normalen Umständen, wenn Sie geplant, Ihre Datenbank auch vor der Zeit implementiert und Einschränkungen vor dem einfügen von Daten in diesem speziellen Szenario würde vermieden werden,
Einfacher Ansatz, dies zu vermeiden gotcha ist
Ich Hoffe, dies hilft jemand
InformationsquelleAutor chitwarnold
Vielleicht diese helfen? Die definition der primary key-Spalte sollte genau die gleiche wie die foreign-key-Spalte.
InformationsquelleAutor Mukus
Stellen Sie sicher, dass alle Tabellen unterstützen können Fremdschlüssel - InnoDB-engine
InformationsquelleAutor joksy82
Die Spalte PARENT-Tabelle, auf die Sie sich beziehen, aus der Kind-Tabelle muss eindeutig sein. Wenn es nicht ist, die Ursache eines Fehlers keine 150.
InformationsquelleAutor Dila Ram Gurung
Ich hatte ein ähnliches problem beim erstellen einer Django mysql-Datenbank mit einer einzigen Tabelle. Ich war in der Lage, das problem zu beheben, indem er die Datenbank in eine text-Datei, verschieben der Tabelle in Frage, um das Ende der Datei mit emacs und importieren Sie die geänderte sql-dump-Datei in die neue Instanz.
HTH Uwe
InformationsquelleAutor hoover
Ich habe das problem behoben, indem die variable annehmen
null
InformationsquelleAutor Fahmi
Ich hab das gleiche problem bei der Ausführung einer Reihe von MySQL-Befehlen. Mine tritt bei der Erstellung einer Tabelle, wenn die auf einen Fremdschlüssel zur anderen Tabelle, die war noch nicht. Es ist die Reihenfolge der Tabelle vorhanden ist, bevor verweisen.
Die Lösung: Erstellen Sie den übergeordneten Tabellen Erster vor dem erstellen einer untergeordneten Tabelle, die einen Fremdschlüssel hat.
InformationsquelleAutor ronIT
Erstellen Sie die Tabelle ohne Fremdschlüssel, dann die foreign key separat.
InformationsquelleAutor stuckhelper