[英]How to fix "java.sql.SQLException: Cannot add foreign key constraint." when creating table with double primary/foreign key relationship
[英]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.