2

名前付きのテーブルを作成します"temp1"- 名前付きの主キーとaaその他のフィールドがあります。そして、 name の別のテーブルがありますtemp2

foreign keyname で追加したいcc

以下のコードを書きましたが、いくつかエラーがあります。

create table temp1 (    
  aa int,    
  primary key(aa)    
);

create table temp2 (
  bb int,
  cc int,
  primary key(bb),
  foreign key(cc) references temp1
);

..しかし、このエラーがあります:

テーブル 'temp.temp2' を作成できません

tempは私のデータベース名です。

Edit:

データを aa (temp1 の主キー) に挿入しましたが、インポートされません

cc (temp2 の外部キー)。

なぜ?

主キーにデータを挿入すると、自動的に挿入されると思いました

外部キー!!これが本当なら?

4

3 に答える 3

5

リンク先の外部フィールドも指定する必要があります。

foreign key (cc) references temp1 (aa)

create table ステートメント内、または

alter table temp2 add foreign key (cc) references temp1 (aa)

その後。同様に、テーブル temp1 の SQL に問題がありaます。主キーを作成するフィールドがありません。質問のタイプミスだと思います。

于 2011-03-13T18:19:14.340 に答える
1

MySQL外部キーのドキュメントから:

MySQL が CREATE TABLE ステートメントからエラー番号 1005 を報告し、エラー メッセージがエラー 150 を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成が失敗しました。

クエリを確認すると、正しいです-使用する必要があります:

CREATE TABLE temp2 (
  bb int,
  cc int,
  PRIMARY KEY (bb),
  FOREIGN KEY (cc) REFERENCES temp1(aa)
);

外部キー制約を作成するときは、親テーブルで外部キーが関連する列を指定する必要があります。他にもある可能性があるため、SQLは主キー列が必要であるとは想定していません。

于 2011-03-13T18:22:29.093 に答える
0

コードは有効な標準 SQL-92 構文です。

これは、オンラインのMimer SQL-92 Validatorを使用してテストできます。

これは、SQL-92 仕様、11.8「参照制約定義」、2b) を読むことで確認できます。

参照されるテーブルと列が参照列リストを指定しない場合、参照されるテーブルのテーブル記述子には、 を指定する一意制約が含まれます PRIMARY KEY

残念ながら、mySQL は SQL-92 に準拠しておらず、参照列リストが必要なようです。

于 2011-03-14T09:37:26.973 に答える