web-dev-qa-db-ja.com

MySQLエラー番号121

MySQL createでこのエラーが発生しています。私がやっている:

_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)

36
Angel.King.47

すべての制約が実際に正しく記述されていることを確認し、制約名FK_userIdまたはFK_blogIdを使用する他のテーブルがないことも確認します

120
nos

エラー121は外部キー制約の問題です。最初に確認することは、外部キーの定義に問題がないことです(すべてのテーブルとフィールド名が正しいなど)。

次のように、テーブルを作成する前に外部キーチェックを無効にすることもできます。

SET FOREIGN_KEY_CHECKS = 0;

キーチェックを再度有効にすると(1に設定)後にエラーがスローされるという欠点がありますが、その場合は、外部キーの作成を妨げる無効なレコードがどこかにあることを意味します。

ただし、物理的にdata/your_database_nameディレクトリの名前を変更するなど、データベースファイルを手動で移動している場合にも、この問題が発生する可能性があります。 InnoDBは、そのような物理的な変更をテーブルスペースに関連付けることができないため、内部構造を模倣します。

これがあなたがしたことである場合、最も効果的な解決策は、古いデータベースを元の場所に戻し、ダンプまたはエクスポートを行い、再インポートする前にDROP DATABASEを実行することです。

7
zombat

私はmysql 5.5でこの問題を抱えていますが、mysql 5.6では問題なく動作します。問題は、制約名が一意であるように見えるが、これが長い名前で切り捨てられた場合、一意ではなくなるためです。たとえば、

long_constraint_name_1long_constraint_name_2 なれるかもしれない long_constraint_name_

1
user55993

作成する外部キーが、参照されるテーブル列のデータ型など、すべての面で同じであることを確認してください。各外部キー名は、それが作成されるテーブルに対して一意である必要があり、他のテーブルでは使用しないでください。上記の問題の場合、外部キー名「FK_userId」は他のテーブルでは使用しないでください。

1
user1570577