class_members
とhistory
という2つのテーブルをMySQLデータベースに作成しようとしています。 class_members
表には、メンバーに関する情報が含まれているとして作成されます。MySQLの外部キーエラー:テーブルを作成することができません
CREATE TABLE `class_members` (
`id` int(11) NOT NULL,
`username` varchar(65) NOT NULL DEFAULT '',
`password` varchar(65) NOT NULL DEFAULT '',
`email` varchar(65) NOT NULL,
`mod_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username_UNIQUE` (`username`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `email_UNIQUE` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
class_members
テーブルが正常に作成されます。
history
テーブルを作成するときに問題が発生するのは、class_members
への参照がforeign key
となっています。
次のように私が使用するコマンドは次のとおりです。
CREATE TABLE `History` (
`history_id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(65) NOT NULL DEFAULT '',
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` VARCHAR(20) NOT NULL,
PRIMARY KEY (`history_id`),
CONSTRAINT `fk_history_member` FOREIGN KEY (`username`)
REFERENCES `class_members` (`username`)
ON UPDATE CASCADE);
私は上記のコマンドを実行すると、私はこのエラーを取得:
ERROR 1005 (HY000): Can't create table 'testDB.History' (errno: 150)
私はHistory
テーブル を読み取ることができない理由を見つけることを試みました(about ERROR 1005) なぜ分かりませんか
フォローアップのコメントでは、私は新しいデータベースを作成し、上記のコマンドを使用して作成しようとしたが、私はまだエラーが発生します。上のスクリーンショットでエラーが発生した理由を添付ピック 更新
(解決)
を参照してください、私が見つかりました。これを解決するには、Historyテーブル作成コマンドの最後にENGINE=InnoDB DEFAULT CHARSET=utf8
を追加する必要があります。
CREATE TABLE `History` (
`history_id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(65) NOT NULL DEFAULT '',
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` VARCHAR(20) NOT NULL,
PRIMARY KEY (`history_id`),
CONSTRAINT `fk_history_member` FOREIGN KEY (`username`)
REFERENCES `class_members` (`username`)
ON UPDATE CASCADE)ENGINE=InnoDB DEFAULT CHARSET=utf8;
これは完全に機能します。
私はちょうどそれを参照しませんでしたか?あなたがポイントを取得しようとするよりも助けることができれば感謝します –
私はどのように私は重複としてフラグを立てるためのポイントを得るか分からないのですか?その投稿があなたを助けてくれたら助けになるか、間違っていると思いますか?しかし、それは、ターゲットとされた投稿は、多かれ少なかれあなたが参照した投稿から重複しているようです。 – Ivar
私はグーグルでそれらのすべてを読んで、私はまだ質問をすることを考えていた問題を解決することができません。おそらく私の構文が間違っているか、私は外来キーに関するいくつかの概念を見逃していました。だからこそ私はコマンドを書こうとしたのです –