У меня есть 3 таблицы: ребенок, родитель и дедушка.У дочернего элемента есть столбец (parentId), указывающий на 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
И строки GrandParent, и Parent создаются с id = 1.Последний оператор завершается ошибкой со следующей ошибкой (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`))
Если я уберу ограничение родительских элементов в родительской таблице, 3-й оператор сработает.
Ваша помощь приветствуется!