创建新表时如何添加外键?
Posted
技术标签:
【中文标题】创建新表时如何添加外键?【英文标题】:How can I add a foreign key when creating a new table? 【发布时间】:2010-09-19 08:39:27 【问题描述】:我有这两个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
);
第二个陈述有什么问题?它没有创建新表。
【问题讨论】:
对于初学者,您可能想用 Foreign 替换 Foriegn ;) 【参考方案1】:您的问题的答案与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;
【讨论】:
【参考方案2】:我建议为支付表设置一个唯一键。另一方面,外键不应该是 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;
【讨论】:
【参考方案3】:确保您将 InnoDB 引擎用于数据库或两个表。来自 mysql 参考:
对于 InnoDB 以外的存储引擎, MySQL 服务器解析 FOREIGN KEY CREATE TABLE 语句中的语法,但是 不使用也不储存。
【讨论】:
【参考方案4】:create table course(ccode int(2) primary key,course varchar(10));
create table student1(rollno int(5) primary key,name varchar(10),coursecode int(2) not
null,mark1 int(3),mark2 int(3),foreign key(coursecode) references course(ccode));
【讨论】:
【参考方案5】:int(15)
和not null
之间应该有空格
【讨论】:
以上是关于创建新表时如何添加外键?的主要内容,如果未能解决你的问题,请参考以下文章