我需要删除一些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_state中所有对应的franchise_id行),并尝试通过以下方式放回约束:
ALTER TABLE franchise_state ADD CONSTRAINT fk_franchise_id_franchise_state FOREIGN KEY (franchise_id) REFERENCES franchise(franchise_id);
但是正如开头所述,我得到“无法添加或更新子行:外部...”?
答案 0 :(得分:1)
这是一个查询,可帮助您在父franchise
表中查找缺失的行:
select franchise_id
from franchise_state
left join franchise using(franchise_id)
where franchise.franchise_id is null;
如果父表中缺少任何行,则创建外键将失败。