我得到这个错误在MySQL创建。我做的:

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;

任何想法?的错误状态:Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

有帮助吗?

解决方案

要检查所有的约束真正阐述了正确,还要检查有没有使用约束名称的任何其他表FK_userId或FK_blogId

其他提示

错误121是一个外键约束问题。要检查的第一件事是,你的外键定义都ok(所有的表和字段名称是正确的,等等)。

您可以尝试创建表,以及像在此之前禁用外键检查:

SET FOREIGN_KEY_CHECKS = 0;

这有后,当您重新启用键检查(将其设置为1)引发错误的缺点,但是,如果是这样的话,那么就意味着你有一些无效的记录的地方,与创建的干扰外键。

不过,也可以,如果你已经手动走动的数据库文件,如物理重命名data/your_database_name目录,就会出现这个问题。 InnoDB的不能关联这样的表空间的物理变化,因此它与所述内部渣土。

如果这是你做了什么,效果最好是将你的旧数据库恢复到它在何处,拉屎或它的出口,并做就可以了DROP DATABASE重新导入之前,该解决方案

请检查您所创建的外键是在各方面相同,例如与所指的表列数据类型。每个外键的名称应该是其所创建的那些表独特的,它不应该被任何其它表中使用。对于上述问题的外键名“FK_userId”不应该以任何其他表来使用。

在我已经在MySQL 5.5这个问题,但在MySQL 5.6工作正常。问题是,因为约束名称看起来是唯一的,但如果这是一个很长的名字,并截断成为非唯一的,例如:

long_constraint_name_1long_constraint_name_2可能变得long_constraint_name_

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top