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?
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?
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:
SHOW CREATE TABLE-Region;
Dies sollte Ihnen den Namen des Index zeigen, ungefähr so:
CONSTRAINT
region_ibfk_1
FOREIGN KEY (country_id
) LITERATURcountry
(id
) ON DELETE NO ACTION ON UPDATE NO ACTION
Jetzt einfach ein:
Ändern Sie den Fremdschlüssel für den Tabellenbereich
region_ibfk_1
.
Und zum Schluss ein:
alter table region drop column country_id;
Und du kannst loslegen!
Es ist in der Tat ein Fremdschlüsselfehler, den Sie mit perror herausfinden können:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
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.
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:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// Lege den Fremdschlüssel hier ab!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Das macht immer den Trick für mich :)
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.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
hier in DROP KEY
statt DROP FOREIGN KEY
,
hoffe es wird helfen.
Vielen Dank
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:
SET FOREIGN_KEY_CHECKS = 0;
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:
SET FOREIGN_KEY_CHECKS = 1;
Viel Glück bei Ihrem Bestreben.
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.
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 ;-)
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:
alter table table_name drop foreign_key_col_name;
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
den LATEST FOREIGN KEY ERROR
Abschnitt ausführen
Verwenden 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:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Tun
SET FOREIGN_KEY_CHECKS=0;
vor der Operation kann auch der Trick tun.
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.
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.
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.
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.