2010-08-11 3 views
2

ce qui ne va pas avec cette commande alter table:MYSQL alter table - ajouter INDEX + FOREIGN KEY donne erreur 1005

ALTER TABLE `lp` 
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , , 
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId`) REFERENCES `Rules` (`RuleId`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
ADD INDEX `fk_1` (`RuleId` ASC) ; 

si je laisse tomber la ligne

ses travaux,

l'erreur que je reçois est:

Error Code : 1005 
Can't create table '..' (errno: 121) 

comment puis-je ajouter une clé étrangère et INDEX sur le même champ?

Mise à jour:

je tente de séparer 2 requêtes, d'abord ajouter INDEX et après ajouter FOREIGN KEY, l'indice ajouté, mais la deuxième requête ne fonctionne pas!

quand je change le nom de clé étrangère (comme: « fk_2 ») et essayez exécuter je reçois une erreur: Code d'erreur: 1452 Impossible d'ajouter ou mettre à jour une ligne enfant: une contrainte de clé étrangère échoue

Répondre

4

Créez d'abord l'index et ensuite la contrainte de clé étrangère. MySQL a besoin d'un index pour créer la clé étrangère, c'est pourquoi vous devez d'abord créer l'index. Utilisez également des instructions séparées.

+0

J'essaie de séparer mais le même problème –

+0

Ah, je vois, vous essayez de donner le même nom à l'index et à la contrainte de clé étrangère. Utilisez des noms uniques et cela devrait fonctionner. –

+0

lorsque je change le nom et que j'essaie de l'exécuter, j'obtiens une erreur: Code d'erreur: 1452 Impossible d'ajouter ou de mettre à jour une ligne enfant: une contrainte de clé étrangère échoue –

1

J'ai eu exactement le même problème. Ce que j'ai trouvé, c'est que vous ne pouvez pas ajouter une clé étrangère s'il existe déjà une autre clé étrangère dans votre base de données qui a exactement le même nom. Même si cette autre clé étrangère est sur une table différente.

erreur 1005 (HY000): Impossible de créer la table './MyDB/#sql-e4a_c715.frm' (errno: 121) Comme mentionné ci-dessus, vous obtiendrez ce message si vous essayez de ajoutez une contrainte avec un nom déjà utilisé ailleurs.

(Taken de here)

Alors Renommez à quelque chose au hasard pour vérifier si je ne me trompe pas ..

0

Je suis arrivé cette erreur après la combinaison DDLs de schéma à partir d'applications N Django en utilisant le " Commande manage.py sqlall ".

J'ai trouvé que DDL de MySQL nécessite que les instructions soient regroupées par kind dans cet ordre. Plus précisément, tous ALTER TABLE ... ADD ... FOREIGN KEY ... doit être se produire en dernier, ou MySQL déclenchera cette erreur.

  1. CREATE TABLE ...
  2. CREATE INDEX ...
  3. ALTER TABLE nom_table ADD nom_contrainte FOREIGN KEY ...
Questions connexes