Ich habe dies in MySQL versucht:
mysql> alter table region drop column country_id;
Und bekam das:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Irgendwelche Ideen? Fremdschlüssel?
mysql
mysql-error-1025
Trenton
quelle
quelle
Antworten:
Normalerweise wird dieser Fehler angezeigt, wenn Ihre Tabellen die InnoDB-Engine verwenden. In diesem Fall müssten Sie den Fremdschlüssel löschen, dann die Änderungstabelle ausführen und die Spalte löschen.
Der schwierige Teil ist jedoch, dass Sie den Fremdschlüssel nicht mit dem Spaltennamen löschen können, sondern stattdessen den Namen suchen müssen, der zum Indizieren verwendet wird. Um dies zu finden, geben Sie die folgende Auswahl ein:
Dies sollte Ihnen den Namen des Index zeigen, ungefähr so:
Jetzt einfach ein:
Und zum Schluss ein:
Und du kannst loslegen!
quelle
Es ist in der Tat ein Fremdschlüsselfehler, den Sie mit perror herausfinden können:
Um mehr Details darüber zu erfahren, was fehlgeschlagen ist, können Sie
SHOW ENGINE INNODB STATUS
den Abschnitt LATEST FOREIGN KEY ERROR verwenden und nach ihm suchen, der Details darüber enthält, was falsch ist.In Ihrem Fall ist es höchstwahrscheinlich, dass etwas auf die Spalte country_id verweist.
quelle
Sie können auch diesen Fehler erhalten, wenn Sie versuchen, einen nicht vorhandenen Fremdschlüssel zu löschen. Stellen Sie daher beim Löschen von Fremdschlüsseln immer sicher, dass diese tatsächlich vorhanden sind.
Wenn der Fremdschlüssel vorhanden ist und dieser Fehler weiterhin angezeigt wird, versuchen Sie Folgendes:
// Lege den Fremdschlüssel hier ab!
Das macht immer den Trick für mich :)
quelle
Führen Sie einfach die Abfrage "alter table" mit 'KEY' anstelle von 'FOREIGN KEY' in der drop-Anweisung aus. Ich hoffe, es wird helfen, das Problem zu lösen, und die Fremdschlüsseleinschränkung wird gelöscht, und Sie können die Tabellenspalten ändern und die Tabelle löschen.
hier in
DROP KEY
stattDROP FOREIGN KEY
,hoffe es wird helfen.
Vielen Dank
quelle
Ich weiß, dies ist ein alter Beitrag, aber es ist der erste Treffer in der Lieblingssuchmaschine aller, wenn Sie nach Fehler 1025 suchen.
Es gibt jedoch einen einfachen "Hack", um dieses Problem zu beheben:
Bevor Sie Ihre Befehle ausführen, müssen Sie zunächst die Prüfung der Fremdschlüsseleinschränkungen mit diesem Befehl deaktivieren:
Dann können Sie Ihre Befehle ausführen.
Vergessen Sie nicht, die Prüfung der Fremdschlüsseleinschränkungen mit diesem Befehl erneut zu aktivieren, nachdem Sie fertig sind:
Viel Glück bei Ihrem Bestreben.
quelle
Ich hatte einmal ähnliche Probleme. Ich habe den Primärschlüssel aus TABELLE A gelöscht, aber als ich versuchte, die Fremdschlüsselspalte aus Tabelle BI zu löschen, wurde der oben genannte Fehler angezeigt.
Sie können den Fremdschlüssel nicht mit dem Spaltennamen löschen. Um dies in PHPMyAdmin oder mit MySQL zu umgehen, entfernen Sie zuerst die Fremdschlüsseleinschränkung, bevor Sie das Attribut umbenennen oder löschen.
quelle
Schauen Sie sich die Fehlerdatei für Ihre MySQL-Datenbank an. Laut Bug # 26305 gibt Ihnen mein SQL nicht die Ursache. Dieser Fehler besteht seit MySQL 4.1 ;-)
quelle
Wenn Sie einen Client wie MySQL Workbench verwenden, klicken Sie mit der rechten Maustaste auf die gewünschte Tabelle, aus der ein Fremdschlüssel gelöscht werden soll. Wählen Sie dann die Registerkarte Fremdschlüssel aus und löschen Sie die Indizes.
Dann können Sie die Abfrage folgendermaßen ausführen:
quelle
Es gibt wahrscheinlich eine andere Tabelle mit einem Fremdschlüssel, der auf den Primärschlüssel verweist, den Sie ändern möchten.
Um herauszufinden, welche Tabelle den Fehler verursacht hat, können Sie
SHOW ENGINE INNODB
STATUS
denLATEST FOREIGN KEY ERROR
Abschnitt ausführenVerwenden Sie die Kategorien SHOW CREATE TABLE, um den Namen der Einschränkung anzuzeigen.
Höchstwahrscheinlich wird es Kategorien_ibfk_1 sein
Verwenden Sie den Namen, um zuerst den Fremdschlüssel und dann die Spalte zu löschen:
quelle
Tun
vor der Operation kann auch der Trick tun.
quelle
Ich würde ein Problem mit Fremdschlüsseleinschränkungen vermuten. Wird country_id als Fremdschlüssel in einer anderen Tabelle verwendet?
Ich bin kein DB-Guru, aber ich glaube, ich habe ein Problem wie dieses (wo es eine fk-Einschränkung gab) gelöst, indem ich das fk entfernt, meine Alter-Table-Sachen gemacht und dann die fk-Sachen wiederholt habe.
Ich werde gespannt sein, was das Ergebnis ist - manchmal ist MySQL ziemlich kryptisch.
quelle
In meinem Fall habe ich die MySQL-Workbench verwendet und beim Ablegen einer meiner Spalten in einer Tabelle das gleiche Problem festgestellt. Ich konnte den Namen des Fremdschlüssels nicht finden. Ich habe die folgenden Schritte ausgeführt, um das Problem zu beheben:
Rt. Klicken Sie auf Ihr Schema und wählen Sie "Schema-Inspektor". Dies gibt Ihnen verschiedene Tabellen, Spalten, Indizes, ect.
Gehen Sie zur Registerkarte "Indizes" und suchen Sie den Namen der Spalte unter der Spalte "Spalte". Einmal gefunden, überprüfen Sie den Namen der Tabelle für diesen Datensatz unter dem Spaltennamen 'Tabelle'. Wenn es mit dem Namen der gewünschten Tabelle übereinstimmt, notieren Sie den Namen des Fremdschlüssels in der Spalte "Name".
Führen Sie nun die Abfrage aus: ALTER table tableNamexx DROP KEY ForeignKeyName;
Jetzt können Sie die drop-Anweisung ausführen, die erfolgreich ausgeführt werden soll.
quelle
Ich habe diesen Fehler mit MySQL 5.6 erhalten, aber er hatte nichts mit Fremdschlüsseln zu tun. Dies war auf einem Windows 7 Professional-Computer, der als Server in einem kleinen LAN fungierte.
Die Clientanwendung hat eine Stapeloperation ausgeführt, bei der eine Tabelle erstellt wird, die mit einigen externen Daten gefüllt wird. Anschließend wird eine Abfrage ausgeführt, die mit permanenten Tabellen verknüpft wird, und anschließend die "temporäre" Tabelle gelöscht. Dieser Stapel führt dies ungefähr 300 Mal aus, und diese spezielle Routine wurde mehrere Jahre lang Woche für Woche ausgeführt, als plötzlich der Fehler 1025 angezeigt wird. Das Problem kann an einem zufälligen Punkt im Stapel nicht umbenannt werden.
In meinem Fall verwendete die Anwendung 4 DDL-Anweisungen, eine CREATE TABLE gefolgt von 3 CREATE INDEX. Es gibt keinen Fremdschlüssel. Es werden jedoch nur 2 der Indizes tatsächlich erstellt und die eigentliche Tabelle .frm-Datei wurde zum Zeitpunkt des Fehlers umbenannt.
Meine Lösung bestand darin, die separaten CREATE INDEX-Anweisungen zu entfernen und sie mit der CREATE TABLE-Anweisung zu erstellen. Dies zum Zeitpunkt des Schreibens hat das Problem für mich und meine Hilfe gelöst. Jemand anderes kratzt sich am Kopf, wenn er diesen Thread findet.
quelle
AverageRatings = FOREACH groupedRatings GENERATE group AS movieID, AVG (Ratings.rating) AS AvgRating, COUNT (Ratings.rating) AS numRatings;
Wenn Sie einen Befehl wie oben verwenden, müssen Sie group in kleinen Buchstaben verwenden. Dies kann Ihr Problem lösen, es hat meins gelöst. Zumindest in PIG-Schrift.
quelle