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.
mysql
sql
phpmyadmin
innodb
mysql-error-1025
Richard Knop
quelle
quelle
Antworten:
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ühren .quelle
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`;
quelle
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.
quelle
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".)
quelle
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.
SHOW CREATE TABLE alarm;
Suchen Sie nach derCONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)
Linie.ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
ALTER TABLE `alarm` DROP `server_id`
Dadurch wird der Fremdschlüsselserver aus der Alarmtabelle gelöscht.
quelle
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 derForeign key constraint (INNODB)
Spalte setzen Sie einfach die Auswahl auf nichts! Bedeutet kein FremdschlüsselHoffe das funktioniert!
quelle
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.
quelle