我有这两个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 );
第二个陈述中的问题是什么?它没有创建一个新表.
在回答你的问题是几乎一样的答案,这一个.
您需要在包含外键的表中指定包含主键的表的名称,以及主键字段的名称(使用"references").
这有一些代码显示如何自己创建外键,以及在CREATE TABLE中.
这是一个更简单的例子:
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;
我建议为付款表设置唯一的密钥。在另一方面,外键不应是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;