質問

私は、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はテーブルスペースのような物理的変化を相関させることができませんので、それは内部でmucksます。

これはあなたが、最高の作品を再インポートする前に、それがあった場所に戻って古いデータベースを移動するダンプまたはそれの輸出を取り、その上にDROP DATABASEを行うことです。解決策をやったことが

あなたが作成しているあなたの外部キーは、そのような言及した表の列とデータ型など、すべての面で同じであることを確認してください。それぞれの外部キーの名前は、それが作成されたそれらのテーブルに対して一意である必要があり、それは他の任意のテーブルに使用すべきではありません。上記の問題のために外部キーの名前「FK_userIdは、」他のテーブルで使用すべきではありません。

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

long_constraint_name_1long_constraint_name_2long_constraint_name_になることがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top