mysql外键违反2级多对一关系

时间:2012-03-26 04:14:04

标签: mysql foreign-keys constraints many-to-one

我有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`))

如果我在父表中删除父祖父表约束,则第三个语句有效。

您的帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

你的脚本是正确的,适合我。但是,在插入之前,请检查Parent表的AUTO_INCREMENT选项。它是' 1'?

例如,运行SHOW CREATE TABLE Parent;语句。