Question

Je reçois cette erreur dans MySQL créer. 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 Erreur: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

Était-ce utile?

La solution

Assurez-vous que toutes vos contraintes sont vraiment orthographié correctement, vérifier également qu'il n'y a pas d'autres tableaux qui utilise les noms de contrainte FK_USERID ou FK_blogId

Autres conseils

Erreur 121 est une question de contrainte de clé étrangère. La première chose à vérifier est que vos définitions clés étrangères sont ok (toutes les tables et les noms de champs sont corrects, etc.).

Vous pouvez essayer de désactiver les contrôles clés étrangères avant de créer la table et, comme ceci:

SET FOREIGN_KEY_CHECKS = 0;

Cela a l'inconvénient de jeter les erreurs plus tard, quand vous réactivez vos contrôles clés (mis à 1), cependant, si tel est le cas, cela signifie que vous avez des enregistrements non valides quelque part qui interfèrent avec la création de la clé étrangère.

Cependant, ce problème peut également se produire si vous avez manuellement les fichiers de base de données se déplacer, comme le changement de nom physiquement le répertoire data/your_database_name. InnoDB ne peut pas établir une corrélation entre les changements physiques comme ça au tablespace, il devient fou 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ù il était, prendre une décharge ou l'exportation de celui-ci, et faire un DROP DATABASE sur elle avant de réimporter.

S'il vous plaît vérifier que votre clé étrangère que vous créez est le même dans tous les aspects tels que le type de données avec la colonne de table visé. Chaque nom de clé étrangère doit être unique pour les tables où il est créé, il ne doit pas être utilisé dans anyother tables. pour le problème au-dessus du nom de clé étrangère « FK_USERID » ne doit pas être utilisé dans une autre table.

J'ai ce problème dans MySQL 5.5 mais fonctionne très bien dans une base MySQL 5.6. Le problème est que le nom de contrainte semble être unique, mais si cela est un nom long et est tronqué le devenir non unique, par exemple:

long_constraint_name_1, long_constraint_name_2 peut devenir long_constraint_name_

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