16

次の 2 つのCREATE TABLEステートメントがあります。

CREATE TABLE GUEST (
  id int(15) not null auto_increment PRIMARY KEY,
  GuestName char(25) not null
);

CREATE TABLE PAYMENT (
  id int(15) not null auto_increment
  Foreign Key(id) references GUEST(id),
  BillNr int(15) not null
);

2番目のステートメントの問題は何ですか?新しいテーブルは作成されませんでした。

4

5 に答える 5

13

あなたの質問に対する答えは、この質問に対する答えとほぼ同じです。

外部キーを含むテーブルで、主キーを含むテーブルの名前と主キー フィールドの名前を指定する必要があります (「参照」を使用)。

これには、外部キーを単独で、および CREATE TABLE で作成する方法を示すコードが含まれています。

以下は、その簡単な例の 1 つです。

CREATE TABLE parent (id INT NOT NULL,
   PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
   INDEX par_ind (parent_id),
   FOREIGN KEY (parent_id) REFERENCES parent(id)
   ON DELETE CASCADE
) ENGINE=INNODB;
于 2008-10-27T11:42:34.120 に答える
7

支払いテーブルに一意のキーを用意することをお勧めします。その側では、外部キーは既存のキーを参照するため、auto_increment であってはなりません。

CREATE TABLE GUEST(
    id int(15) not null auto_increment PRIMARY KEY, 
    GuestName char(25) not null
)  ENGINE=INNODB;

CREATE TABLE PAYMENT(
    id int(15)not null auto_increment, 
    Guest_id int(15) not null, 
    INDEX G_id (Guest_id), 
    Foreign Key(Guest_id) references GUEST(id),
    BillNr int(15) not null
)  ENGINE=INNODB;
于 2008-10-27T11:35:23.277 に答える
0

データベースまたは両方のテーブルに InnoDB エンジンを使用していることを確認してください。MySQL リファレンスから:

InnoDB 以外のストレージ エンジンの場合、MySQL Server は CREATE TABLE ステートメントの FOREIGN KEY 構文を解析しますが、それを使用または保存しません。

于 2008-10-27T11:12:58.343 に答える
-1

int(15)と の間にはスペースが必要ですnot null

于 2011-03-19T05:06:22.010 に答える