# 1025 - Fehler beim Umbenennen von './database/#sql-2e0f_1254ba7' in './database/table' (Fehler: 150)


81

Ich versuche also, einer der Tabellen in meiner Datenbank einen Primärschlüssel hinzuzufügen. Im Moment hat es einen Primärschlüssel wie diesen:

PRIMARY KEY (user_id, round_number)

Wobei user_id ein Fremdschlüssel ist.

Ich versuche es so zu ändern:

PRIMARY KEY (user_id, round_number, created_at)

Ich mache dies in phpmyadmin, indem ich auf das Primärschlüsselsymbol in der Tabellenstrukturansicht klicke.

Dies ist der Fehler, den ich bekomme:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

Es ist eine MySQL-Datenbank mit InnoDB-Tabellen-Engine.


1
Eine schnelle Suche mit Google bringt mich auf die Idee, dass dieses Problem mit Einschränkungen zusammenhängt. Mögliche hilfreiche Links: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html und simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

Antworten:


138

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 STATUSden LATEST FOREIGN KEY ERRORAbschnitt ausführen .


2
In meinem Fall wurde die Datenbank neu erstellt, ohne Tabellen.
Guilherme Ferreira

33

Wie gesagt, Sie müssen die FKs vorher entfernen. Auf MySQL mache es so:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;

1
Ihre Antwort hat mir wirklich geholfen. DROP FOREIGN KEY hat das Problem gelöst. Vielen Dank
Ram Babu S

1
Dies löste auch mein Problem, aber das gleiche Skript arbeitete an meiner Entwicklung MySQL. Ist dies eine Sache, die sich in einer Version von MySQL geändert hat?
Bancarel Valentin

24

Für diejenigen, die diese Frage über Google erhalten ... kann dieser Fehler auch auftreten, wenn Sie versuchen, ein Feld umzubenennen, das als Fremdschlüssel fungiert.


13

Um dies in PHPMyAdmin oder mit MySQL zu umgehen, entfernen Sie zuerst die Fremdschlüsseleinschränkung, bevor Sie das Attribut umbenennen.

(Für PHPMyAdmin-Benutzer: Um FK-Einschränkungen in PHPMyAdmin zu entfernen, wählen Sie das Attribut aus und klicken Sie in der Symbolleiste unter der Tabellenstruktur neben "Druckansicht" auf "Beziehungsansicht".)


1
Ich denke, dies ist die genaueste Antwort
MontrealDevOne

4

Wenn Sie versuchen, eine Spalte zu löschen, bei der es sich um einen AUSLÄNDISCHEN SCHLÜSSEL handelt, müssen Sie den richtigen Namen finden, der nicht der Spaltenname ist. Beispiel: Wenn ich versuche, das Serverfeld in der Alarmtabelle zu löschen, das ein Fremdschlüssel für die Servertabelle ist.

  1. SHOW CREATE TABLE alarm; Suchen Sie nach der CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)Linie.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Dadurch wird der Fremdschlüsselserver aus der Alarmtabelle gelöscht.


4

Ich hatte dieses Problem, es ist für Fremdschlüssel

Klicken Sie auf Relation View(wie im Bild unten) und suchen Sie den Namen des Feldes, das Sie entfernen möchten. Unter der Foreign key constraint (INNODB)Spalte setzen Sie einfach die Auswahl auf nichts! Bedeutet kein Fremdschlüssel

Geben Sie hier die Bildbeschreibung ein

Hoffe das funktioniert!


0

Wenn Sie einen Fremdschlüssel hinzufügen und dieser Fehler auftritt, ist möglicherweise der Wert in der untergeordneten Tabelle nicht in der übergeordneten Tabelle vorhanden.

Angenommen, für die Spalte, zu der der Fremdschlüssel hinzugefügt werden muss, sind alle Werte auf 0 gesetzt, und der Wert ist in der Tabelle, auf die Sie verweisen, nicht verfügbar.

Sie können einen Wert festlegen, der in der übergeordneten Tabelle vorhanden ist, und dann den für mich funktionierenden Fremdschlüssel hinzufügen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.