创建新表时如何添加外键?

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之间应该有空格

【讨论】:

以上是关于创建新表时如何添加外键?的主要内容,如果未能解决你的问题,请参考以下文章

尝试创建新表时对象名称无效

Django:在运行单元测试之前创建测试表时“无法添加外键约束”

如何在sqlyog设置表的外键

创建仅在创建新表时运行的触发器

怎么添加外键约束

在创建新表时插入另一个表中的值