J'ai essayé ceci dans mysql:
mysql> alter table region drop column country_id;
Et j'ai ceci:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Des idées? Trucs de clé étrangère?
J'ai essayé ceci dans mysql:
mysql> alter table region drop column country_id;
Et j'ai ceci:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Des idées? Trucs de clé étrangère?
Réponses:
Vous obtenez généralement cette erreur si vos tables utilisent le moteur InnoDB. Dans ce cas, vous devrez supprimer la clé étrangère, puis modifier la table et supprimer la colonne.
Mais le plus délicat est que vous ne pouvez pas supprimer la clé étrangère en utilisant le nom de la colonne, mais à la place, vous devrez trouver le nom utilisé pour l'indexer. Pour le trouver, exécutez la sélection suivante:
SHOW CREATE TABLE région;
Cela devrait vous montrer le nom de l'index, quelque chose comme ceci:
CONTRAINTEZ TOUTE
region_ibfk_1
ÉTRANGÈRE (country_id
) RÉFÉRENCEScountry
(id
) SUR SUPPRIMER PAS D'ACTION SUR MISE À JOUR PAS D'ACTION
Maintenant, émettez simplement un:
modifier la région de la table déposer la clé étrangère
region_ibfk_1
;
Et enfin un:
modifier la région de la table drop column country_id;
Et vous êtes prêt à partir!
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 section LATEST FOREIGN KEY ERROR qui contient des détails sur ce qui ne va pas.
Dans votre cas, c'est 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 non existante. Ainsi, lors de la suppression de 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 :)
Exécutez simplement la requête alter table en utilisant «KEY» au lieu de «FOREIGN KEY» dans l'instruction drop. J'espère que cela aidera à résoudre le problème et supprimera la contrainte de clé étrangère et vous pourrez modifier les colonnes de la table et supprimer la table.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
ici au DROP KEY
lieu de DROP FOREIGN KEY
,
espérons que cela aidera.
Merci
Je sais, c'est un ancien message, mais c'est le premier résultat sur le moteur de recherche préféré de tout le monde si vous recherchez l'erreur 1025.
Cependant, il existe un "hack" facile pour résoudre ce problème:
Avant d'exécuter vos commandes, vous devez d'abord désactiver la vérification des contraintes de clé étrangère à l'aide de cette commande:
SET FOREIGN_KEY_CHECKS = 0;
Ensuite, vous pouvez exécuter vos commandes.
Une fois que vous avez terminé, n'oubliez pas de réactiver la vérification des contraintes de clé étrangère à l'aide de cette commande:
SET FOREIGN_KEY_CHECKS = 1;
Bonne chance dans votre entreprise.
J'ai eu un problème similaire une fois. J'ai supprimé la clé primaire du TABLEAU A, mais lorsque j'essayais de supprimer la colonne de clé étrangère de la table BI, la même erreur ci-dessus a été affichée.
Vous ne pouvez pas supprimer 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 clé étrangère avant de renommer ou de supprimer l'attribut.
Jetez un œil au fichier d'erreur de votre base de données mysql. Selon le bogue # 26305, mon sql ne vous donne pas la cause. Ce bogue existe depuis MySQL 4.1 ;-)
Si vous utilisez un client tel que MySQL Workbench, cliquez avec le bouton droit de la souris sur la table souhaitée à partir de laquelle une clé étrangère doit être supprimée, puis sélectionnez l'onglet de 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;
Il existe probablement une autre table avec une clé étrangère faisant référence à la clé primaire que vous essayez de modifier.
Pour savoir quelle table a causé l'erreur, vous pouvez exécuter SHOW ENGINE INNODB
STATUS
, puis consultez la LATEST FOREIGN KEY ERROR
section
Utilisez les catégories SHOW CREATE TABLE pour afficher le nom de la contrainte.
Ce sera très probablement categories_ibfk_1
Utilisez le nom pour supprimer d'abord la clé étrangère, puis la colonne:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Faire
SET FOREIGN_KEY_CHECKS=0;
avant l'opération peut également faire l'affaire.
Je suppose que problème de contrainte de clé étrangère. Country_id est-il utilisé comme clé étrangère dans une autre table?
Je ne suis pas un gourou de la base de données mais je pense avoir résolu un problème comme celui-ci (où il y avait une contrainte fk) en supprimant le fk, en faisant mes trucs alter table puis en refaisant les trucs fk.
Je serai intéressé d'entendre le résultat - parfois mysql est assez cryptique.
Dans mon cas, j'utilisais MySQL workbench et j'ai rencontré le même problème en déposant une de mes colonnes dans une table. Je n'ai pas trouvé le nom de la clé étrangère. J'ai suivi les étapes suivantes pour résoudre le problème:
Rt. cliquez sur votre schéma et sélectionnez «inspecteur de schéma». Cela vous donne diverses tables, colonnes, index, etc.
Allez dans l'onglet nommé «Index» et recherchez le nom de la colonne sous la colonne nommée «Colonne». Une fois trouvé, vérifiez le nom de la table pour cet enregistrement sous le nom de colonne «Table». S'il correspond au nom de la table souhaitée, notez le nom de la clé étrangère dans la colonne nommée «Nom».
Exécutez maintenant la requête: ALTER table tableNamexx DROP KEY ForeignKeyName;
Vous pouvez maintenant exécuter l'instruction drop qui s'exécutera avec succès.
J'ai eu cette erreur avec MySQL 5.6 mais cela n'avait rien à voir avec les clés étrangères. C'était sur une machine Windows 7 Professionnel agissant comme un serveur sur un petit LAN.
L'application cliente effectuait une opération par lots qui crée une table la remplit de quelques données externes puis exécute une requête se joignant à des tables permanentes puis en supprimant la table "temporaire". Ce lot le fait environ 300 fois et cette routine particulière fonctionnait semaine après semaine depuis plusieurs années lorsque soudainement nous obtenons l'erreur 1025 Impossible de renommer le problème à un moment aléatoire du lot.
Dans mon cas, l'application utilisait 4 instructions DDL un CREATE TABLE suivi de 3 CREATE INDEX, il n'y a pas de clé étrangère. Cependant, seuls 2 des index sont réellement créés et le fichier .frm de la table réelle a été renommé au moment de l'échec.
Ma solution était de se débarrasser des instructions CREATE INDEX séparées et de les créer à l'aide de l'instruction CREATE TABLE. Cela au moment de la rédaction de cet article a résolu le problème pour moi et mon aide à quelqu'un d'autre qui se gratte la tête quand il trouve ce fil.
averageRatings = FOREACH groupedRatings GENERATE groupe AS movieID, AVG (notes.rating) AS avgRating, COUNT (notes.rating) AS numRatings;
Si vous utilisez une commande comme ci-dessus, vous devez utiliser le groupe en minuscules. Cela peut résoudre votre problème, il a résolu le mien. Au moins dans le script PIG.