it-swarm.com.de

Was bedeutet MySQL-Fehler 1025 (HY000): Fehler beim Umbenennen von './foo' (Fehlernummer: 150)

Ich habe dies in MySQL versucht:

mysql> alter table region drop column country_id;

Und habe folgendes bekommen:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

Irgendwelche Ideen? Fremdschlüssel Zeug?

154
Trenton

Diese Fehlermeldung wird normalerweise angezeigt, wenn Ihre Tabellen die InnoDB-Engine verwenden. In diesem Fall müssten Sie den Fremdschlüssel löschen und dann die Änderungstabelle ausführen und die Spalte löschen.

Der knifflige Teil ist jedoch, dass Sie den Fremdschlüssel nicht mit dem Spaltennamen löschen können, sondern stattdessen den Namen suchen müssen, der für die Indexierung verwendet wird. Um das zu finden, gib folgende Auswahl aus:

SHOW CREATE TABLE Bereich;

Hier sollte der Name des Index angezeigt werden, etwa wie folgt:

CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) REFERENCES country (id) ON DELETE NO AKTION AUF AKTUALISIERUNG KEINE AKTION

Jetzt einfach ein:

Ändern Sie den Tabellenbereich und löschen Sie den Fremdschlüssel region_ibfk_1;

Und zum Schluss noch ein:

Ändern Sie die Spalte für den Tabellenbereich country_id;

Und du bist gut zu gehen!

232
Jeshurun

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 weitere Details zu erfahren, was fehlgeschlagen ist, können Sie SHOW ENGINE INNODB STATUS verwenden und den Abschnitt LATEST FOREIGN KEY ERROR suchen. Dort finden Sie Details zu den Fehlern. 

In Ihrem Fall ist es höchstwahrscheinlich, dass etwas auf die Spalte country_id verweist.

173
Harrison Fisk

Sie können diesen Fehler auch erhalten, wenn Sie versuchen, einen nicht vorhandenen Fremdschlüssel zu löschen. Wenn Sie Fremdschlüssel ablegen, stellen Sie immer sicher, dass sie tatsächlich vorhanden sind.

Wenn der Fremdschlüssel vorhanden ist und Sie diesen Fehler immer noch erhalten, versuchen Sie Folgendes:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';

// Lass den Fremdschlüssel hier fallen!

SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;

Das macht immer den Trick für mich :)

14
Jeroen

Führen Sie einfach die Abfrage der Alterstabelle mit 'KEY' anstelle von 'FOREIGN KEY' in der Drop-Anweisung aus. Ich hoffe, es hilft beim Lösen des Problems und löscht die Fremdschlüsseleinschränkung. 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 anstelle von DROP FOREIGN KEY,

hoffe es wird helfen.

Vielen Dank

7
Sohail

Ich weiß, dies ist ein alter Beitrag, aber es ist der erste Treffer in jeder bevorzugten Suchmaschine, 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 Überprü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 Überprüfung der Fremdschlüsseleinschränkungen erneut zu aktivieren, indem Sie diesen Befehl verwenden:

SET FOREIGN_KEY_CHECKS = 1;

Viel Glück bei deinen Bemühungen.

2
Baccata

Ich hatte einmal ein ähnliches Problem. Ich habe den Primärschlüssel aus TABELLE A gelöscht, aber als ich versuchte, die Fremdschlüsselspalte aus Tabelle B zu löschen, wurde mir derselbe Fehler angezeigt.

Sie können den Fremdschlüssel nicht mit dem Spaltennamen löschen. Um dies in PHPMyAdmin oder MySQL zu umgehen, entfernen Sie zunächst die Fremdschlüsseleinschränkung, bevor Sie das Attribut umbenennen oder löschen.

2
Joomler

Tun

SET FOREIGN_KEY_CHECKS=0;

bevor die Operation auch den Trick machen kann.

1
Jan Tchärmän

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 wie folgt ausführen:

alter table table_name drop foreign_key_col_name;
1
iltaf khalid

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 INNODBSTATUS ausführen und dann den Abschnitt LATEST FOREIGN KEY ERROR anzeigen

Verwenden Sie die SHOW CREATE TABLE-Kategorien, um den Namen der Einschränkung anzuzeigen.

Am wahrscheinlichsten wird es categories_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;
1
youngdero

Schauen Sie sich die Fehlerdatei Ihrer mysql-Datenbank an. Laut Fehler # 26305 mein SQL gibt Ihnen nicht die Ursache. Dieser Fehler existiert seit MySQL 4.1 ;-)

1
marabol

Ich schätze das Fremdschlüsselproblem. Wird country_id in einer anderen Tabelle als Fremdschlüssel verwendet?

Ich bin kein DB-Guru, aber ich denke, ich habe ein Problem wie dieses gelöst (wo es eine Einschränkung für die fk gab), indem ich die fk entfernte, mein Alter-Table-Zeug mache und dann das fk-Zeug neu mache.

Ich bin gespannt, was das Ergebnis ist - manchmal ist mysql ziemlich kryptisch.

0
itsmatt

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 mit einigen externen Daten gefüllt wird. Anschließend wird eine Abfrage ausgeführt, die mit permanenten Tabellen verbunden wird. Anschließend wird die "temporäre" Tabelle gelöscht. Dieser Stapel macht dies etwa 300 Mal, und diese bestimmte Routine wurde mehrere Jahre lang Woche für Woche ausgeführt, als plötzlich der Fehler 1025 auftauchte.

In meinem Fall verwendete die Anwendung 4 DDL-Anweisungen, CREATE TABLE gefolgt von 3 CREATE INDEX. Es ist kein Fremdschlüssel vorhanden. Es werden jedoch nur zwei der Indizes erstellt und die tatsächliche .frm-Datei der Tabelle 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 hat zum Zeitpunkt des Schreibens das Problem für mich und meine Hilfe gelöst, wenn jemand anderes den Kopf kratzte, wenn er diesen Thread findet. 

0
Chris Millard

In meinem Fall habe ich die MySQL-Workbench verwendet, und ich hatte das gleiche Problem, als ich eine meiner Spalten in einer Tabelle ablegte. Ich konnte den Namen des Fremdschlüssels nicht finden. Ich habe die folgenden Schritte ausgeführt, um das Problem zu beheben:

  1. Rt. Klicken Sie auf Ihr Schema und wählen Sie "Schema-Inspektor". Dies gibt Ihnen verschiedene Tabellen, Spalten, Indizes, ect.

  2. Gehen Sie auf die Registerkarte "Indizes" und suchen Sie den Namen der Spalte unter der Spalte "Spalte". Sobald Sie gefunden wurden, überprüfen Sie den Namen der Tabelle für diesen Datensatz unter der Spalte "Tabelle". Wenn es mit dem Namen der gewünschten Tabelle übereinstimmt, notieren Sie sich den Namen des Fremdschlüssels aus der Spalte "Name".

  3. Führen Sie nun die Abfrage aus: ALTER-Tabelle tableNamexx DROP KEY foreignKeyName;

  4. Jetzt können Sie die Drop-Anweisung ausführen, die erfolgreich ausgeführt werden soll.

0
Jatin Shashoo