Question

ce qui ne va pas avec cette commande alter table:

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

  ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...

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:

i essayer de séparer 2 requêtes, ajoutez d'abord INDEX et après ajout FOREIGN KEY, l'index ajouté, mais la deuxième requête ne fonctionnent pas!

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

Était-ce utile?

La solution

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

Autres conseils

J'ai eu exactement le même problème.

Ce que j'ai trouvé 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 autre table.

  

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 d'ajouter une contrainte avec un nom qui est déjà utilisé ailleurs.

(extrait de )

Renommez à quelque chose au hasard pour vérifier si je suis correct ..

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

Je trouve que MySQL nécessite de DDL les états financiers soient regroupés par type dans cet ordre. Plus précisément, toutes ALTER TABLE ... ADD ... FOREIGN KEY ... doit se dernier, ou MySQL soulèvera cette erreur.

  1. CREATE TABLE ...
  2. CREATE INDEX ...
  3. ALTER TABLE nom_table ADD nom_contrainte FOREIGN KEY ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top