我有3个表,一个Child,一个Parent和一个GrandParent。 Child有一个列(parentId)指向Parent(多对一关系)。 Parent有一个列(grandParentId)指向GrandParent(另一个多对一)。当我插入到GrandParent和Parent时,它们都可以工作。但是,当我插入Child时,它会因“外键约束”违规而失败。
create table Child (
id bigint not null auto_increment unique,
attr1 int,
parentId bigint not null,
primary key (id)
);
create table Parent (
id bigint not null auto_increment unique,
attr1 int,
grandParentId bigint not null,
primary key (id)
);
create table GrandParent (
id bigint not null auto_increment unique,
attr1 int,
primary key (id)
);
alter table Child
add constraint FK102016375B091
foreign key (parentId)
references Parent (id);
alter table Parent
add constraint FKB99B04C56B478365
foreign key (grandParentId)
references GrandParent (id);
insert into GrandParent(attr1) values(1); # created GrandParent(id)=1
insert into Parent(attr1, grandParentId) values(2, 1); #created Parent(id=1)
insert into Child(attr1, parentId) values(3, 1); #fails
使用id = 1创建GrandParent和Parent行。最后一条语句失败,出现以下错误(t1是一个新数据库)。
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`t1`.`child`, CONSTRAINT `FK102016375B091` FOREIGN KEY (`parentId`) REFERENCES `Parent` (`id`))
如果我在父表中删除父祖父表约束,则第三个语句有效。
您的帮助表示赞赏!
答案 0 :(得分:0)
你的脚本是正确的,适合我。但是,在插入之前,请检查Parent
表的AUTO_INCREMENT选项。它是' 1'?
例如,运行SHOW CREATE TABLE Parent;
语句。