MySQLのエラー番号121
-
19-09-2019 - |
質問
私は、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_1
、long_constraint_name_2
がlong_constraint_name_
になることがあります。