gpt4 book ai didi

mysql - Dopped FK constraint to delete a record and cannot add it after. MySQL

转载 作者:行者123 更新时间:2023-11-29 07:24:28 25 4
gpt4 key购买 nike

我需要删除一些 FK 约束以删除表中的一行,但我想在删除后将其添加回来,但是当我尝试将其添加回时出现此错误:

无法添加或更新子行:外键约束失败...

我知道当您尝试插入不存在的相应键时会发生此错误,但不清楚为什么在尝试将约束添加回表时出现此错误?它是一个映射表,因此可能存在一些问题?

这是原始表格:

CREATE TABLE `franchise_state` (
`franchise_id` int(11) NOT NULL,
`state_id` int(11) NOT NULL,
PRIMARY KEY (`franchise_id`,`state_id`),
KEY `fk_state_id_franchise_state` (`state_id`),
CONSTRAINT `fk_franchise_id_franchise_state` FOREIGN KEY (`franchise_id`) REFERENCES `franchise` (`franchise_id`),
CONSTRAINT `fk_state_id_franchise_state` FOREIGN KEY (`state_id`) REFERENCES `states` (`state_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

然后我运行了这个 alter table 语句:

alter table franchise_state drop foreign key fk_franchise_id_franchise_state

现在表格是这样的:

CREATE TABLE `franchise_state` (
`franchise_id` int(11) NOT NULL,
`state_id` int(11) NOT NULL,
PRIMARY KEY (`franchise_id`,`state_id`),
KEY `fk_state_id_franchise_state` (`state_id`),
CONSTRAINT `fk_state_id_franchise_state` FOREIGN KEY (`state_id`) REFERENCES `states` (`state_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

好的,此时我删除 franchise 表中的行(并删除 franchise_state 中所有相应的 franchise_id 行)并尝试将约束放回:

ALTER TABLE franchise_state ADD CONSTRAINT fk_franchise_id_franchise_state FOREIGN KEY (franchise_id) REFERENCES franchise(franchise_id);

但如开头所述,我得到“无法添加或更新子行:外来...”??

最佳答案

下面的查询有助于查找父 franchise 表中缺失的行:

select franchise_id 
from franchise_state
left join franchise using(franchise_id)
where franchise.franchise_id is null;

如果父表中有任何缺失的行,则创建外键将失败。

关于mysql - Dopped FK constraint to delete a record and cannot add it after. MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com