Question

Ok, donc je suis en train de créer des tables dans MySQL avec des index et des clés étrangères. J'utilise MySQL Workbench pour créer les tables, puis l'ont ingénieur en avant un script SQL créer (je mieux dans un environnement visuel DB que simplement écrire le code SQL à la main tout de suite).

Le problème est plusieurs fois quand j'importer le script SQL dans MySQL, je reçois le eror classique:

#1005 - Can't create table 'db.tablename' (errno: 121) 

Je suis parvenu à comprendre le problème à chaque fois, généralement index / clé étrangère liée, mais maintenant je commence à me énerver d'avoir à fixer à chaque fois. Je ne comprends pas vraiment ce que le problème est (surtout quand un produit MySQL crée le code SQL pour sa propre base de données). Ci-dessous un code qui provoque généralement le problème.

CREATE  TABLE IF NOT EXISTS `db`.`groupMembers` (
  `groupMembersID` INT NOT NULL AUTO_INCREMENT ,
  `groupID` INT NOT NULL ,
  `userID` INT NULL ,
  PRIMARY KEY (`groupMembersID`) ,
  INDEX `group` (`groupID` ASC) ,
  INDEX `user` (`userID` ASC) ,
  CONSTRAINT `group`
    FOREIGN KEY (`groupID` )
    REFERENCES `db`.`groups` (`groupsID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `user`
    FOREIGN KEY (`userID` )
    REFERENCES `db`.`users` (`usersID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

L'erreur provient généralement de la première définition INDEX - même lorsque je prends la définition de l'index, je viens d'obtenir l'erreur au la première définition de la contrainte de clé étrangère. J'ai vérifié, et la colonne à distance clé étrangère et la colonne locale sont le même type de données et la taille.

Était-ce utile?

La solution

"errno 121 signifie une double erreur touche"

Les contraintes doivent avoir un nom unique dans la base de données, vous voudrez peut-être changer vos noms FK. Comme tel, FK_groupMembers_group et FK_groupMembers_user.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top