2008-10-27 27 views
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 Foriegn Key(id) references GUEST(id), BillNr int(15) not null); 

什么是第二条语句的问题?它没有创建新的表格。

+0

您可能希望通过外交对于初学者更换Foriegn;) – Luk 2008-10-27 09:46:02

回答

0

确保您将InnoDB引擎用于数据库或两个表。从MySQL参考:

对于比其他的InnoDB存储引擎, MySQL服务器解析外键 语法在CREATE TABLE语句,但 不使用或存放它。

1

我会建议有一个唯一的付款表的关键。另一方面,外键不应该是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; 
7

您的问题的答案几乎与this one的答案相同。

您需要在包含外键的表中指定包含主键的表的名称和主键字段的名称(使用“引用”)。

This有一些代码显示了如何通过自己创建外键以及在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; 
-1

应该有int(15)not null之间的空间