2009-09-20 5 views
8

J'ai problème avec chute index de clé étrangère, je reçois toujours la même erreurErreur MySQL lorsque l'indice baisse (errno 150)

ALTER TABLE `comments` DROP INDEX `id_user` 

qui sort

1025 - Error on rename of './postuj_cz1/#sql-d834_a0c704' 
to './postuj_cz1/comments' (errno: 150) 

Le id_user de l'autre table est un index de clé primaire simple.

J'utilise la version MySQL 5.0.85

+1

Essayez laisser tomber toutes les clés étrangères à la première table. –

+0

En fait, je n'ai pas de fk à la table –

Répondre

2

Selon this link, l'erreur a trait à la définition du champ de clé primaire. L'erreur ne concerne pas l'index de clé étrangère.

Vérifiez la clé primaire pour le tableau COMMENTS pour vous assurer qu'il n'a pas le mot clé UNSIGNED tandis que la clé étrangère COMMENTS.id_user avait le mot clé UNSIGNED. Ce mot clé était à l'origine du problème - type de champ incohérent.

Pour corriger, ajoutez le mot clé UNSIGNED à la définition de clé primaire pour la table COMMENTS. Ou retirer le mot-clé UNSIGNED de la définition de clé étrangère ...

11

Il y a d'autres causes aussi. Par exemple, j'avais un index unique impliquant deux colonnes distinctes de clés étrangères. J'ai dû laisser tomber les clés étrangères en question avant de pouvoir laisser tomber l'index unique. (Et évidemment vous pouvez ajouter les clés étrangères par la suite.)

+1

Merci, c'était le problème dans mon cas. – nightcoder

5

INNODB: cela pourrait être aussi simple que de supprimer la Relation avant de laisser tomber l'Index.

+1

La relation était, pour mon cas, tout verrouiller. Ainsi, la suppression des relations, la suppression suivante de l'index, la création d'un nouvel index, puis la restauration des relations – Vaseltior

1

L'indice est une clé étrangère sur la table « utilisateur », donc En premier, essayez cette commande:

SHOW CREATE TABLE my_table 

Trouver le nom de la contrainte correspondant à l'indice sur la clé étrangère,

et après cela, essayez la commande:

ALTER TABLE my_table DROP FOREIGN KEY FK_myconstraintcode 

AVERTISSEMENT: Si vous essayez de laisser tomber la clé étrangère avec le nom de clé étrangère, vous aurez une erreur!