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)
すべての制約が実際に正しく記述されていることを確認し、制約名FK_userIdまたはFK_blogIdを使用する他のテーブルがないことも確認します
エラー121は外部キー制約の問題です。最初に確認することは、外部キーの定義に問題がないことです(すべてのテーブルとフィールド名が正しいなど)。
次のように、テーブルを作成する前に外部キーチェックを無効にすることもできます。
SET FOREIGN_KEY_CHECKS = 0;
キーチェックを再度有効にすると(1に設定)後にエラーがスローされるという欠点がありますが、その場合は、外部キーの作成を妨げる無効なレコードがどこかにあることを意味します。
ただし、物理的にdata/your_database_name
ディレクトリの名前を変更するなど、データベースファイルを手動で移動している場合にも、この問題が発生する可能性があります。 InnoDBは、そのような物理的な変更をテーブルスペースに関連付けることができないため、内部構造を模倣します。
これがあなたがしたことである場合、最も効果的な解決策は、古いデータベースを元の場所に戻し、ダンプまたはエクスポートを行い、再インポートする前にDROP DATABASE
を実行することです。
私はmysql 5.5でこの問題を抱えていますが、mysql 5.6では問題なく動作します。問題は、制約名が一意であるように見えるが、これが長い名前で切り捨てられた場合、一意ではなくなるためです。たとえば、
long_constraint_name_1
、long_constraint_name_2
なれるかもしれない long_constraint_name_
作成する外部キーが、参照されるテーブル列のデータ型など、すべての面で同じであることを確認してください。各外部キー名は、それが作成されるテーブルに対して一意である必要があり、他のテーブルでは使用しないでください。上記の問題の場合、外部キー名「FK_userId」は他のテーブルでは使用しないでください。