16

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

第二个陈述有什么问题?它没有创建新表。

4

5 回答 5

13

你的问题的答案与这个问题的答案几乎相同。

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

有一些代码显示了如何自己创建外键,以及在 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;
于 2008-10-27T11:42:34.120 回答
7

我建议为付款表设置一个唯一键。另一方面,外键不应该是 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;
于 2008-10-27T11:35:23.277 回答
0

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

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

于 2008-10-27T11:12:58.343 回答
0
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));
于 2019-04-26T13:16:27.750 回答
-1

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

于 2011-03-19T05:06:22.010 回答