为啥执行这些表时会出现错误1452? [复制]

Posted

技术标签:

【中文标题】为啥执行这些表时会出现错误1452? [复制]【英文标题】:Why is error 1452 appearing when executing these tables? [duplicate]为什么执行这些表时会出现错误1452? [复制] 【发布时间】:2020-02-22 19:18:21 【问题描述】:

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

【问题讨论】:

因为您试图在statistics_per_year 中添加一行,其中infected_id 的值为3,而statistics_reference 表中不存在该行。错误消息非常清楚地解释了问题所在,并特别告诉您,如果您阅读错误消息,则会违反什么约束。 我注意到这个问题在 *** 上被称为“重复”。这是否意味着我应该删除这个问题? 【参考方案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。您正在尝试使用infected_id = 3 在依赖表statistics_per_year 中插入一条记录。这会失败,因为在 statistics_reference 中没有该值的父记录。

您可以在statistics_reference 中插入缺少的父记录,或更改子表中的insert 以引用现有的父ID。

【讨论】:

以上是关于为啥执行这些表时会出现错误1452? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试创建此表时不断收到外键错误? [复制]

错误 1452 MySQL 和 NodeJS。为啥数据库不能正确引用我的表?

为啥我的画布在将 html 转换为 DOM 调用时会自行缩放? [复制]

为啥 EditText 验证时会出现两个错误标志?

为啥使用 SingleAsync 时会出现此错误?

为啥将 NSManagedObjectContext 保存为“干净”时会出现合并错误?