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?
mysql
mysql-error-1025
Trenton
la source
la source
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:
Cela devrait vous montrer le nom de l'index, quelque chose comme ceci:
Maintenant, émettez simplement un:
Et enfin un:
Et vous êtes prêt à partir!
la source
C'est en effet une erreur de clé étrangère, vous pouvez le découvrir en utilisant perror:
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.
la source
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:
// Déposez la clé étrangère ici!
Cela fait toujours l'affaire pour moi :)
la source
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.
ici au
DROP KEY
lieu deDROP FOREIGN KEY
,espérons que cela aidera.
Merci
la source
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:
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:
Bonne chance dans votre entreprise.
la source
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.
la source
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 ;-)
la source
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:
la source
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 laLATEST FOREIGN KEY ERROR
sectionUtilisez 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:
la source
Faire
avant l'opération peut également faire l'affaire.
la source
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.
la source
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.
la source
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.
la source
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.
la source