2

私はこのエラーに関する多くの投稿を読みましたが、どの解決策も問題を解決することができませんでした(私がそれらを正しく試したと仮定して)。

エラーの原因となるコードは次のとおりです。

CREATE TABLE season
(
  id          smallint unsigned NOT NULL auto_increment,
  title       varchar(25) NOT NULL,

  PRIMARY KEY (id)
);

CREATE INDEX seasonId ON season(id);

DROP TABLE IF EXISTS event;
CREATE TABLE event
(
  id           smallint unsigned NOT NULL auto_increment,
  title        varchar(255) NOT NULL,
  season_id    smallint NOT NULL,

  PRIMARY KEY (id),
  FOREIGN KEY (season_id) REFERENCES season(id)
  ON UPDATE RESTRICT ON DELETE RESTRICT
);

したがって、エラーによると、私の外部キー宣言に問題があります。ただし、このコードはすでにマシン上で問題なく実行されており、Linuxマシンでも完全に実行されました(現在、Windows 7で作業しています)。

これがの出力ですSHOW ENGINE INNODB STATUS

------------------------
LATEST FOREIGN KEY ERROR
------------------------
120229 17:43:28 Error in foreign key constraint of table fcrcontent/event:
FOREIGN KEY (season_id) REFERENCES season(id)
  ON UPDATE RESTRICT ON DELETE RESTRICT
):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
for correct foreign key definition.

また、新しいデータベースでスクリプトを実行しようとしましたが、うまくいきませんでした。

これがからの出力ですshow create table season

| season | CREATE TABLE `season` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `seasonId` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
4

4 に答える 4

4

season.id は署名されていないため、event.season_id も署名されていない必要があります。

CREATE TABLE event
(
  id           smallint unsigned NOT NULL auto_increment,
  title        varchar(255) NOT NULL,
  season_id    smallint unsigned NOT NULL,

  PRIMARY KEY (id),
  FOREIGN KEY (season_id) REFERENCES season(id)
  ON UPDATE RESTRICT ON DELETE RESTRICT
);
于 2012-02-29T17:43:07.880 に答える
2

「テーブル 'X' を作成できません (errno: 150)」の問題については、このページを確認してください。

彼が指摘する最も重要なことは、それが発生した直後にコマンドラインから mysql サーバーにログインし、次のように入力することです。

エンジンの INNODB ステータスを表示します。

それはあらゆる種類のがらくたを吐き出しますが、最も重要なことは、「LATEST FOREIGN KEY ERROR」というタイトルのセクションが表示され、実際の問題が次のように表示されるはずです。


最新の外部キー エラー

121114 16:22:57 テーブル dgweb/company の外部キー制約のエラー: 最初の列として列を含む参照テーブルにインデックスがないか、参照テーブルのデータ型がテーブルのデータ型と一致しません。制約: , CONSTRAINT "fk_company_wf_reporting_info" FOREIGN KEY ("wf_reporting_info") REFERENCES > "wf_reporting_info" ("wf_reporting_info_id") テーブルの外部キーのインデックスは "fk_company_wf_reporting_info" を参照してくださいhttp://dev.mysql.com/doc/refman /5.5/en/innodb-foreign-key-constraints.html を参照して、正しい外部キーを定義してください。

そうすれば、一体何が間違っているのかがわかります:-)。

于 2012-11-14T22:32:27.780 に答える
1

からの出力を表示していないためshow create table season、何が問題なのかわかりません。

ただし、MySQL ドキュメントにはチェックリストがあります。

  • 対応する列 [...] は、同様の内部データ型を持つ必要があります。[..]整数型のサイズと符号は同じでなければなりません

  • InnoDB では、外部キーと参照キーのインデックスが必要です [...]。

  • [...]参照されるテーブルには、参照される列が同じ順序で最初の列としてリストされているインデックスが必要です。

(強調鉱山)。

テーブルがこれらの基準を満たしていることを確認してください。それでも失敗する場合は、ドキュメント ページの残りの基準をお読みください。

于 2012-02-29T17:37:13.990 に答える
0

これ :

`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

これとまったく同じタイプである必要があります:

season_id    smallint NOT NULL,

に変更します

smallint(5)
于 2012-03-05T15:49:50.527 に答える