MySQL (InnoDB): löschen Sie die Spalte und die zugehörige foreign key-Einschränkung und index
Hier ist meine Tabelle:
CREATE TABLE `alums_alumphoto` (
`id` int(11) NOT NULL auto_increment,
`alum_id` int(11) NOT NULL,
`photo_id` int(11) default NULL,
`media_id` int(11) default NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `alums_alumphoto_alum_id` (`alum_id`),
KEY `alums_alumphoto_photo_id` (`photo_id`),
KEY `alums_alumphoto_media_id` (`media_id`),
CONSTRAINT `alums_alumphoto_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media_mediaitem` (`id`),
CONSTRAINT `alum_id_refs_id_706915ea` FOREIGN KEY (`alum_id`) REFERENCES `alums_alum` (`id`),
CONSTRAINT `photo_id_refs_id_63282119` FOREIGN KEY (`photo_id`) REFERENCES `media_mediaitem` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8
Ich möchte, um die Spalte zu löschen photo_id
, die vermutlich auch benötigen, löschen Sie die foreign key-Einschränkung und index.
Das problem ist, dass ich bekomme Fehler, wenn ich versuche, legen Sie die Spalte:
FEHLER 1025 (HY000): Error on rename of '.\dbname\#sql-670_c5c' zu '.\dbname\alums_alumphoto' (errno: 150)
... wenn ich versuche den index löschen (gleiche wie oben), und wenn ich versuche, um die drop foreign key-Einschränkung:
FEHLER 1091 (42000): Can ' T DROP 'photo_id_refs_id_63282119'; überprüfen, dass die Spalte/Schlüssel vorhanden ist)
Welcher Reihenfolge sollte ich all dies tun? Was präzise Befehle sollte ich verwenden?
Haben Sie versucht, fallen beide die Spalte und der index im gleichen ALTER-Anweisung?
InformationsquelleAutor nmjk | 2008-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die sichere Sache ist, um ein Duplikat der Tabelle.
Wenn es ein Fehler bei der Ausführung UMBENENNEN TABELLE, einige andere Tische haben könnten foreign key-Einschränkungen verweisen auf diese Tabelle, in welchem Fall dieser ganze Ansatz ist blöd. 🙂
InformationsquelleAutor yogman
Genau, versuchen Sie dies :
Ersten drop Foreign Key-oder-Einschränkung :
Den vorherigen Befehl entfernt die Foreign Key-Einschränkung für die Spalte. Jetzt können Sie legen Sie die Spalte
photo_id
(der index entfernt von MySQL auf fallenlassen der Spalte) :Aternatively, Sie könnten kombinieren diese 2 Operationen in einem :
InformationsquelleAutor Rishi Agarwal
Versuchen Sie die Kombination der DROP-TASTE-and-DROP FOREIGN KEY-Aussagen.
InformationsquelleAutor Ed Mays