1

エラーは次のとおりです。テーブルc.handsetsを作成できません

問題を見つけるにはどうすればよいですか?

データベースを作成しましたが、他のテーブルがデータベースに作成されていることがわかりましたが、このエラーが発生するのは1つだけです。

4

1 に答える 1

1

外部キーに対して満たさなければならない条件があります。

  • 両方のテーブルで InnoDB ストレージ エンジンを使用する必要があります。

  • データ型は両方のテーブルで同一でなければなりません。たとえば、VARCHAR(250) は VARCHAR(255) と同じではありません。

  • 親テーブルの列には PRIMARY KEY または UNIQUE 制約が必要です。

  • 外部キーは、親テーブルの PRIMARY KEY または UNIQUE 制約の列と同じ列を同じ順序で宣言する必要があります。これが最も可能性の高い問題です。

たとえば、これが親テーブルの場合:

CREATE TABLE PhoneModels (
  make VARCHAR(255),
  model VARCHAR(255),
  PRIMARY KEY (make, model)
);

主キーには 2 つの列がありますが、各外部キーには 1 つの列があるため、次は正しくありません。

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make) REFERENCES PhoneModels(make),                  // WRONG
  FOREIGN KEY (model) REFERENCES PhoneModels(model)                 // WRONG
);

このようには機能しません。両方の列を参照する 1 つの外部キーが必要です。

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model),    // RIGHT
);
于 2010-10-12T01:04:34.973 に答える