-1

我想在一些表中插入一些数据。但是,在到达时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);
4

1 回答 1

0

您的架构保持不变:

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以引用现有父 ID。

于 2019-10-26T23:21:48.000 回答