J'ai essayé ceci dans mysql :
mysql> alter table region drop column country_id;
Et j'ai eu ça :
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Des idées ? Une clé étrangère ?
J'ai essayé ceci dans mysql :
mysql> alter table region drop column country_id;
Et j'ai eu ça :
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Des idées ? Une clé étrangère ?
Vous obtenez généralement cette erreur si vos tables utilisent le moteur InnoDB. Dans ce cas, vous devez supprimer la clé étrangère, puis effectuer une modification de la table et supprimer la colonne.
Mais la partie délicate est que vous ne pouvez pas déposer la clé étrangère en utilisant le nom de la colonne, mais vous devez trouver le nom utilisé pour l'indexer. Pour le trouver, faites la sélection suivante :
SHOW CREATE TABLE region ;
Cela devrait vous montrer le nom de l'index, quelque chose comme ceci :
CONSTRAINT
region_ibfk_1
FOREIGN KEY (country_id
) RÉFÉRENCEScountry
(id
) ON DELETE NO ACTION ON UPDATE NO ACTION
Maintenant, il suffit d'émettre un :
modifier la table region et supprimer la clé étrangère
region_ibfk_1
;
Et enfin un :
alter table region drop column country_id ;
Et vous êtes prêt à partir !
Il s'agit bien d'une erreur de clé étrangère, vous pouvez le découvrir en utilisant perror :
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
Pour trouver plus de détails sur ce qui a échoué, vous pouvez utiliser SHOW ENGINE INNODB STATUS
et recherchez la section LATEST FOREIGN KEY ERROR ; elle contient des détails sur ce qui ne va pas.
Dans votre cas, c'est très probablement parce que quelque chose fait référence à la colonne country_id.
Vous pouvez également obtenir cette erreur en essayant de supprimer une clé étrangère inexistante. Ainsi, lorsque vous supprimez des clés étrangères, assurez-vous toujours qu'elles existent réellement.
Si la clé étrangère existe, et que vous obtenez toujours cette erreur, essayez ce qui suit :
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// Déposez la clé étrangère ici !
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Cela fait toujours l'affaire pour moi :)
Il suffit d'exécuter la requête alter table en utilisant 'KEY' au lieu de 'FOREIGN KEY' dans l'instruction drop. J'espère que cela vous aidera à résoudre le problème et que la contrainte de la clé étrangère sera supprimée. Vous pourrez alors modifier les colonnes de la table et la supprimer.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
ici à DROP KEY
au lieu de DROP FOREIGN KEY
,
J'espère que cela vous aidera.
Merci
Si vous utilisez un client comme MySQL Workbench, cliquez avec le bouton droit de la souris sur la table souhaitée dans laquelle une clé étrangère doit être supprimée, puis sélectionnez l'onglet Clé étrangère et supprimez les index.
Ensuite, vous pouvez exécuter la requête comme ceci :
alter table table_name drop foreign_key_col_name;
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
@skiphoppy - Essayez-vous de donner une prime à une réponse déjà donnée ? Est-ce même autorisé ? Ou votre cas est-il différent, auquel cas vous devriez commencer un autre fil de discussion ?
0 votes
@RickJames Oui, c'est le cas. Cependant, skiphoppy devrait ajouter son commentaire sous la réponse qu'elle a élue, car le message de bouty disparaîtra lorsque le bounty sera terminé.