37 votes

Erreur MySQL n° 121

J'obtiens cette erreur dans la création de MySQL. C'est ce que je fais :

CREATE TABLE `blogReply` (

    `Id`      INT(24)      NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table',
    `blogId`  INT(24)      NOT NULL COMMENT 'Blog where this reply was posted',
    `userId`  INT(24)      NULL COMMENT 'User the blog was posted by',
    `name`    VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by',
    `email`   VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by',
    `http`    VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by',
    `message` TEXT         NOT NULL COMMENT 'text of the blog',
    `votes`   INT(10)      DEFAULT 0 COMMENT 'Rating of the Blog',
    `ratedBy` TEXT         COMMENT 'People who have already Voted on this blog',
    `dateReg` BIGINT       NOT NULL COMMENT 'Date the User was Registered',

    PRIMARY KEY (`Id`),

    CONSTRAINT `FK_userId` FOREIGN KEY(`userId`)
        REFERENCES `user` (`Id`)
        ON DELETE SET NULL
        ON UPDATE CASCADE,

    CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`)
        REFERENCES `blog` (`Id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE

) ENGINE = InnoDB;

Des idées ? Les états d'erreur : Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

120voto

nos Points 102226

Vérifiez que toutes vos contraintes sont bien orthographiées correctement, vérifiez également qu'il n'y a pas d'autres tables qui utilisent les noms de contraintes FK_userId ou FK_blogId.

7voto

zombat Points 46702

L'erreur 121 est un problème de contrainte de clé étrangère. La première chose à vérifier est que vos définitions de clés étrangères sont correctes (toutes les tables et tous les noms de champs sont corrects, etc.)

Vous pouvez également essayer de désactiver les vérifications des clés étrangères avant de créer la table, comme ceci :

SET FOREIGN_KEY_CHECKS = 0;

Cela a l'inconvénient de provoquer des erreurs plus tard lorsque vous réactivez vos contrôles de clé (mettez-le à 1), cependant, si c'est le cas, cela signifie que vous avez des enregistrements invalides quelque part qui interfèrent avec la création de la clé étrangère.

Toutefois, ce problème peut également se produire si vous avez déplacé manuellement les fichiers de la base de données, par exemple en renommant physiquement les fichiers de la base de données. data/your_database_name répertoire. InnoDB ne peut pas corréler les changements physiques de ce type au tablespace, donc il s'amuse avec les internes.

Si c'est ce que vous avez fait, la solution qui fonctionne le mieux est de déplacer votre ancienne base de données à l'endroit où elle se trouvait, d'en faire un dump ou une exportation, et de faire un DROP DATABASE sur elle avant de la réimporter.

1voto

user1570577 Points 56

Vérifiez que la clé étrangère que vous créez est identique en tous points, comme le type de données, à la colonne de la table concernée. Chaque nom de clé étrangère doit être unique pour les tables dans lesquelles il est créé, il ne doit pas être utilisé dans d'autres tables. Pour le problème ci-dessus, le nom de clé étrangère "FK_userId" ne doit pas être utilisé dans d'autres tables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X