Почему при выполнении этих таблиц появляется ошибка 1452?

Я хочу вставить некоторые данные в некоторые таблицы. Однако при достижении statistics_per_year mysql выдает код ошибки 1452, и я не знаю, почему это так.

ошибка:

17:54:58    INSERT INTO statistics_per_year(disease_continent_id,infected_id,dead_id) VALUES(2,3,4) Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`practice`.`statistics_per_year`, CONSTRAINT `statistics_per_year_ibfk_1` FOREIGN KEY (`infected_id`) REFERENCES `statistics_reference` (`infected_id`))    0.484 sec

код:

CREATE TABLE df(
    disease_continent_id INT NOT NULL PRIMARY KEY 
);
CREATE TABLE statistics_reference(
    infected_id INT NOT NULL,
    dead_id INT NOT NULL,
    per_100000_population VARCHAR(30) NOT NULL,
    PRIMARY KEY(infected_id)
);
CREATE TABLE statistics_per_year(
    disease_continent_id INT NOT NULL,
    infected_id INT NOT NULL,
    dead_id INT NOT NULL,
    FOREIGN KEY(infected_id) REFERENCES statistics_reference(infected_id),
    FOREIGN KEY(disease_continent_id) REFERENCES df(disease_continent_id)
);
INSERT INTO df(disease_continent_id)
VALUES(1);
INSERT INTO statistics_reference(infected_id,dead_id,per_100000_population)
VALUES(1,2,"fff");
INSERT INTO statistics_per_year(disease_continent_id,infected_id,dead_id)
VALUES(1,3,4);

person Oscar    schedule 26.10.2019    source источник
comment
Потому что вы пытаетесь добавить в statistics_per_year строку со значением 3 для infected_id, которого нет в таблице statistics_reference. Сообщение об ошибке очень четко объясняет, в чем проблема, и конкретно говорит вам, какое ограничение нарушается, если вы читаете сообщение об ошибке.   -  person Ken White    schedule 27.10.2019
comment
Я заметил, что этот вопрос был назван «дубликатом» в Stackoverflow. Означает ли это, что я должен удалить этот вопрос?   -  person Oscar    schedule 27.10.2019


Ответы (1)


Ваша схема остается:

CREATE TABLE statistics_per_year(
    ...
    FOREIGN KEY(infected_id) REFERENCES statistics_reference(infected_id),
    ...
);       

Это означает: каждое значение, которое вы вставляете в statistics_per_year(infected_id), должно существовать в statistics_reference(infected_id).


Вы делаете:

INSERT INTO statistics_reference
    (infected_id,dead_id,per_100000_population) 
    VALUES(1,2,"fff");
INSERT INTO statistics_per_year
    (disease_continent_id,infected_id,dead_id) 
    VALUES(1,3,4);

Таблица statistics_reference содержит только одну запись с infected_id = 1. Вы пытаетесь вставить запись в зависимую таблицу statistics_per_year с помощью infected_id = 3. Это не удается, потому что нет родительской записи для этого значения в statistics_reference.

Вы можете либо вставить отсутствующую родительскую запись в statistics_reference, либо изменить insert в дочерней таблице, чтобы она ссылалась на существующий родительский идентификатор.

person GMB    schedule 26.10.2019