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

use*_*451 10 mysql create-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
);
Run Code Online (Sandbox Code Playgroud)

第二个陈述中的问题是什么?它没有创建一个新表.

DOK*_*DOK 12

在回答你的问题是几乎一样的答案,这一个.

您需要在包含外键的表中指定包含主键的表的名称,以及主键字段的名称(使用"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;
Run Code Online (Sandbox Code Playgroud)


Hap*_*ido 5

我建议为付款表设置唯一的密钥。在另一方面,外键不应是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;
Run Code Online (Sandbox Code Playgroud)


小智 0

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

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