Ce n'erreur mysql 1025 (HY000): Erreur sur renommer"./ foo' (errorno: 150) moyenne?

j'ai essayé ceci dans mysql:

mysql> alter table region drop column country_id;

Et obtenu ceci:

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

des idées? Clé étrangère de choses?

152
demandé sur OMG Ponies 2008-10-02 03:33:21

12 réponses

vous obtenez habituellement cette erreur si vos tables utilisent le moteur InnoDB. Dans ce cas, vous devez laisser tomber la clé étrangère, puis faire la table alter et laisser tomber la colonne.

mais la partie délicate est que vous ne pouvez pas laisser tomber la clé étrangère en utilisant le nom de la colonne, mais à la place vous devriez trouver le nom utilisé pour l'indexer. Pour trouver cela, lancez la sélection suivante:

afficher créer la région de la TABLE;

Cela devrait vous montrer le nom de l'index, quelque chose comme:

CONSTRAINT region_ibfk_1 FOREIGN LÉGENDE ( country_id ) RÉFÉRENCES country ( id ) SUPPRIMER ACTION ON UPDATE NO ACTION

Maintenant simplement une question:

alter table de la région de drop de clé étrangère region_ibfk_1 ;

et enfin an:

alter table région de la chute de la colonne pays_id;

Et vous êtes bon pour aller!

228
répondu Jeshurun 2011-04-11 00:45:46

c'est en effet 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 en savoir plus sur ce qui a échoué, vous pouvez utiliser SHOW ENGINE INNODB STATUS et rechercher la dernière section D'erreur de clé étrangère il contient des détails sur ce qui ne va pas.

dans votre cas, c'est probablement parce que quelque chose renvoie à la colonne country_id.

172
répondu Harrison Fisk 2013-12-23 06:02:25

vous pouvez obtenir aussi obtenir cette erreur en essayant de laisser tomber une clé étrangère non existante. Ainsi, lorsque vous laissez tomber 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;

C'est toujours un truc pour moi :)

14
répondu Jeroen 2009-10-22 08:40:08

exécute simplement la requête alter table en utilisant 'KEY' au lieu de 'FOREIGN KEY' dans l'instruction drop. J'espère qu'il aidera à résoudre le problème, et laissera tomber la contrainte de clé étrangère et vous pouvez changer les colonnes de table et laisser tomber la table.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

ici dans DROP KEY au lieu de DROP FOREIGN KEY ,

j'espère que ça aidera.

Merci

5
répondu Sohail 2013-05-29 03:55:21

j'ai eu des problèmes similaires une fois. J'ai supprimé la clé primaire du tableau A mais lorsque j'ai essayé de supprimer la colonne de la clé étrangère du tableau B, j'ai été montré la même erreur ci-dessus.

vous ne pouvez pas laisser tomber la clé étrangère en utilisant le nom de la colonne et pour contourner cela dans PHPMyAdmin ou avec MySQL, supprimez d'abord la contrainte de la clé étrangère avant de renommer ou supprimer l'attribut.

2
répondu Joomler 2016-01-12 05:40:40

je sais, c'est un vieux post, mais c'est le premier hit sur le moteur de recherche préféré de tout le monde si vous cherchez l'erreur 1025.

cependant, il y a un "hack" facile pour corriger cette question:

avant d'exécuter votre(s) commande (s), vous devez d'abord désactiver la vérification des contraintes de clé étrangère en utilisant cette commande:

SET FOREIGN_KEY_CHECKS = 0;

ensuite, vous pouvez exécuter votre(s) commande (s).

après que vous avez terminé, n'oubliez pas d'activer à nouveau les contraintes de clé étrangère en utilisant cette commande:

SET FOREIGN_KEY_CHECKS = 1;

bonne chance pour votre entreprise.

2
répondu Baccata 2017-01-09 08:34:22

recherchez dans le fichier d'erreur votre base de données mysql. Selon Bug # 26305 mon sql ne vous en donne pas la cause. Ce bug existe depuis MySQL 4.1 ; -)

1
répondu marabol 2010-03-16 16:39:32

si vous utilisez un client comme MySQL Workbench, faites un clic droit sur la table désirée à partir de laquelle une clé étrangère doit être supprimée, puis sélectionnez l'onglet clé étrangère et supprimez les index.

alors vous pouvez exécuter la requête comme ceci:

alter table table_name drop foreign_key_col_name;
1
répondu iltaf khalid 2013-01-08 20:25:24

Il y a probablement une autre table avec une clé étrangère référençant la clé primaire que vous voulez modifier.

pour savoir quelle table a causé l'erreur, vous pouvez lancer SHOW ENGINE INNODB STATUS et ensuite regarder la LATEST FOREIGN KEY ERROR section

utiliser afficher créer des catégories de tableau pour afficher le nom de la contrainte.

très probablement ce sera categories_ibfk_1

utilisez le nom pour laisser tomber la clé étrangère d'abord, puis la colonne:

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
1
répondu youngdero 2016-01-11 13:24:13

Faire

SET FOREIGN_KEY_CHECKS=0;

avant l'Opération peut également faire l'affaire.

1
répondu Jan Tchärmän 2017-01-14 16:25:35

je dirais problème de contrainte de clé étrangère. Est country_id utilisé comme une clé étrangère dans une autre table?

Je ne suis pas guru DB mais je pense que j'ai résolu un problème comme celui-ci (où il y avait une contrainte fk) en enlevant le fk, en faisant mon truc de table d'alter et puis en refaisant le truc fk.

je serai curieux d'entendre ce que le résultat est - parfois mysql est assez cryptique.

0
répondu itsmatt 2008-10-01 23:42:07

dans mon cas, J'utilisais MySQL workbench et j'ai fait face au même problème en laissant tomber une de mes colonnes dans une table. Je ne pouvais pas trouver le nom de la clé étrangère. J'ai suivi les étapes suivantes pour résoudre le problème:

  1. RT.cliquez sur votre schéma et sélectionnez "inspecteur de schéma". Cela vous donne divers tableaux, colonnes, index, ect.

  2. colonnes, sous la colonne nommée "Colonne". Une fois trouvé, cochez le nom de la table pour cet enregistrement sous le nom de la colonne 'Table'. Si elle correspond au nom de la table que vous souhaitez, puis notez le nom de la clé étrangère de la colonne intitulée "Nom".

  3. exécutez maintenant la requête: ALTER TABLE tableNamexx DROP KEY foreignKeyName;

  4. Maintenant vous pouvez exécuter l'instruction drop qui doit s'exécuter avec succès.

0
répondu Jatin Shashoo 2016-02-25 07:51:34