MySQL (InnoDB): besoin de supprimer la colonne, et d'accompagnement de la contrainte de clé étrangère et index
Voici ma table:
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
Je veux supprimer la colonne photo_id
, qui sans doute va également exiger la suppression de la contrainte de clé étrangère et l'index.
Le problème est que j'obtiens une erreur lorsque je tente de chute de la colonne:
ERREUR 1025 (HY000): Erreur sur renommer". \dbname\#sql-670_c5c' à '.\dbname\alums_alumphoto' (errno: 150)
... quand j'essaie de supprimer l'index (le même que ci-dessus), et quand j'ai essayez de supprimer la contrainte de clé étrangère:
ERREUR 1091 (42000): ne Peut pas laisser TOMBER 'photo_id_refs_id_63282119'; vérifier que la colonne/clé existe)
Quel ordre dois-je faire de tout cela? Ce que des commandes précises dois-je utiliser?
Avez-vous essayé de faire tomber les deux de la colonne et de l'index dans la même instruction ALTER?
OriginalL'auteur nmjk | 2008-12-03
Vous devez vous connecter pour publier un commentaire.
La chose est sure, pour faire une copie de la table.
Si il y a une erreur lors de l'exécution de RENOMMER la TABLE, d'autres tables peuvent avoir des contraintes de clé étrangère référençant ce tableau, auquel cas l'ensemble de cette approche est stupide. 🙂
OriginalL'auteur yogman
Précisément, essayez ceci :
D'abord supprimer la Clé Étrangère ou de Contrainte :
La précédente commande supprime la Contrainte de Clé Étrangère sur la colonne. Vous pouvez maintenant déposer la colonne
photo_id
(l'index est supprimé par MySQL sur la suppression de la colonne) :Aternatively, vous pouvez combiner ces 2 opérations en une :
OriginalL'auteur Rishi Agarwal
Essayez de combiner la BAISSE de la CLÉ et de DROP de CLÉ ÉTRANGÈRE des états.
OriginalL'auteur Ed Mays