MySQL 错误号 121

发布于 2024-07-29 05:50:34 字数 1353 浏览 10 评论 0原文

我在 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;

有什么想法吗? 错误状态:无法创建表 './xxxxxxxx/blogReply.frm' (errno: 121)

I'm getting this error in MySQL create. I'm doing:

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;

Any Ideas? The Error States: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

小镇女孩 2024-08-05 05:50:34

检查所有约束是否拼写正确,还要检查是否没有任何其他表使用约束名称 FK_userId 或 FK_blogId

Check that all your constraints are really spelled out correctly, also check that there's not any other tables that uses the constraint names FK_userId or FK_blogId

假情假意假温柔 2024-08-05 05:50:34

错误121是外键约束问题。 首先要检查的是您的外键定义是否正确(所有表和字段名称是否正确等)。

您也可以在创建表之前尝试禁用外键检查,如下所示:

SET FOREIGN_KEY_CHECKS = 0;

这样做的缺点是稍后当您重新启用键检查(将其设置为 1)时会抛出错误,但是,如果是这种情况,那么它意味着您在某处有一些无效记录,这些记录会干扰外键的创建。

但是,如果您手动移动数据库文件(例如物理重命名 data/your_database_name 目录),也可能会出现此问题。 InnoDB 无法将物理变化与表空间关联起来,因此它会破坏内部结构。

如果这就是您所做的,最有效的解决方案是将旧数据库移回原来的位置,转储或导出它,并在重新导入之前对其执行DROP DATABASE

Error 121 is a foreign key constraint issue. The first thing to check is that your foreign key definitions are ok (all the tables and field names are correct, etc.).

You can try disabling foreign key checks before creating the table as well, like this:

SET FOREIGN_KEY_CHECKS = 0;

That has the downside of throwing errors later when you re-enable your key checks (set it to 1), however, if this is the case, then it means you have some invalid records somewhere that are interfering with the creation of the foreign key.

However, this issue can also occur if you've been manually moving database files around, such as physically renaming the data/your_database_name directory. InnoDB can't correlate physical changes like that to the tablespace, so it mucks with the internals.

If this is what you did, the solution that works best is to move your old database back to where it was, take a dump or export of it, and do a DROP DATABASE on it before re-importing.

谜兔 2024-08-05 05:50:34

请检查您正在创建的外键在所有方面(例如数据类型与引用的表列)是否相同。 每个外键名称对于创建它的表来说应该是唯一的,不应该在任何其他表中使用。 对于上述问题,外键名称“FK_userId”不应在任何其他表中使用。

please check that your foreign key which you are creating is same in all aspects such as datatype with the referred table column . Each foreign key name should be unique for those tables in which it is created , it should not be used in anyother tables. for the above problem the Foreign key name "FK_userId" should not be used in any other table .

私藏温柔 2024-08-05 05:50:34

我在 mysql 5.5 中遇到这个问题,但在 mysql 5.6 中工作正常。 问题是因为约束名称看起来是唯一的,但如果这是一个长名称并且被截断,则变得不唯一,例如:

long_constraint_name_1long_constraint_name_2可能会变成long_constraint_name_

In I've this problem in mysql 5.5 but works fine in mysql 5.6. The problem was because the constraint name looks to be unique but if this is a long name and is truncated the become non unique, for example :

long_constraint_name_1, long_constraint_name_2 may become long_constraint_name_

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文