163 votes

Que signifie l'erreur mysql 1025 (HY000) : Erreur lors du renommage de './foo' (errorno : 150) ?

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 ?

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é.

242voto

Jeshurun Points 7257

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ÉRENCES country ( 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 !

0 votes

Notez que vous pouvez également supprimer la clé étrangère et la colonne en une seule requête ALTER TABLE ;

0 votes

Bien ! nous devrions laisser tomber la clé étrangère, tout ira bien ! Merci !

172voto

Harrison Fisk Points 3867

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.

2 votes

Encore une fois, une autre erreur trompeuse affichée par MySQL... Merci.

0 votes

Dans phpMyAdmin, vous pouvez trouver le statut du moteur dans Moteurs de stockage , InnoDB , Statut InnoDB

15voto

Jeroen Points 101

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 :)

1 votes

J'en avais besoin pour passer à un jeu de caractères différent pour une table, en raison d'une erreur mysql : ERREUR 1025 (HY000) : Error on rename of './table/#sql-14ae_81' to (errno : 150)

8voto

Sohail Points 11

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

1voto

iltaf khalid Points 941

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.com

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.

Powered by:

X