繁体   English   中英

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

[英]How can I add a foreign key when creating a new table?

我有这两个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;

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

对于InnoDB以外的存储引擎,MySQL Server在CREATE TABLE语句中解析FOREIGN KEY语法,但不使用或存储它。

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));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM