2009-08-20 6 views
3

Ok, donc je crée des tables dans MySQL avec des index et des clés étrangères. J'utilise MySQL Workbench pour créer les tables et ensuite avoir un ingénieur SQL pour créer un script SQL (je fais mieux dans un environnement DB visuel que d'écrire le code SQL à la main tout de suite).MySQL Créer une table avec des erreurs d'index

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 à m'énerver d'avoir à le réparer à chaque fois. Je ne comprends pas vraiment quel est le problème (surtout quand un produit MySQL crée du code SQL pour sa propre base de données). Voici 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 distante de clé étrangère et la colonne locale sont le même type de données et taille.

Répondre

4

« errno 121 signifie clé doublon »

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.

+0

Merci - J'ai changé toute ma clé étrangère, les noms d'index et cela a corrigé les erreurs. Cela s'applique-t-il également aux noms d'index ou sont-ils uniquement spécifiques aux tables? –

+0

Oui, chaque entité (index, tableau, etc.) devrait être unique dans la base de données. – Fabian

Questions connexes