2009-07-24 7 views
35

MySQLの作成でこのエラーが発生しました。私がやっている:MySQL errorno 121

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)

答えて

116

チェック、制約名FK_userIdまたはFK_blogId

+0

私はその理論をテストしましょう。前にFK_userIdという名前を付けていますが、別のテーブルにあると思います。 –

+18

ニースは、テーブルを通して一意の名前を持つ。ありがとう:) – Shade

+0

今日私は、今年何年もmySQLを使用して初めてこのエラーが発生しました。名前が常に一致したのは本当に偶然でした。 –

7

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

あなたはこのように、同様の表を作成する前に、外部キーチェックを無効にしてみてくださいすることができ

:あなたのキーのチェックを(1に設定)再度有効にする場合、後でエラーを投げるの欠点を持っている

SET FOREIGN_KEY_CHECKS = 0; 

しかし、これが当てはまる場合は、外部キーの作成を妨げている無効なレコードがどこかにあることを意味します。

ただし、この問題は、data/your_database_nameディレクトリの名前を物理的に変更するなど、データベースファイルを手動で移動した場合にも発生する可能性があります。 InnoDBは、物理的な変更をテーブルスペースと相関させることはできません。そのため、内部と混乱します。

この場合、最も効果的なソリューションは、元のデータベースを元の場所に戻したり、ダンプやエクスポートを行ったり、再インポートする前にDROP DATABASEを実行したりすることです。また、すべての制約が本当に正しく綴られていることを

+1

ないイムない移動thisgsになることがあります。私はちょうどインストールファイルを作成し、それを新しくコピーしてすべてのテーブルを作成します。 –

1

を使用する任意の他のテーブルが存在しないことを確認し、作成しているあなたの外部キーがすべての面で同じであることを確認してください参照された表の列を持つデータ型など)。各外部キー名は、作成されたテーブルで一意でなければなりません。他のテーブルでは使用しないでください。上記の問題では、外部キー名 "FK_userId"は他のテーブルで使用しないでください。

1

私はこの問題をmysql 5.5で持っていますが、mysql 5.6ではうまくいきます。問題は、制約名が一意になりそうだためだったが、これは長い名前であり、例えば、非ユニークなっ切り捨てられた場合:

long_constraint_name_1long_constraint_name_2は周りの物理的long_constraint_name_

関連する問題