我有4个sql表。
create table general(regno int NOT NULL primary key);
create table company_information(cregno int NOT NULL primary key);
create table company_jobs (jcode int NOT NULL primary key, cregno int , foreign key(cregno) references company_information(cregno));
create table applied(cregno int ,jcode int, regno int, foreign key(regno) references general(regno), foreign key(jcode) references company_jobs(jcode));
当我申请的表有一些价值时,我需要做的是从表company_jobs中删除。实际上,从表结构中可以看出,所有表必须具有一些应用表的值才能具有某些值。 我使用这些命令添加ON DELETE CASCADE约束:
alter table company_jobs add constraint fk_cregno13 foreign key(cregno) references company_information (cregno) on delete cascade;
alter table applied add constraint fk_jcode16 foreign key(jcode) references company_jobs(jcode) on delete cascade;
alter table applied add constraint fk_regno14 foreign key(regno) references general(regno) on delete cascade;
但不幸的是它没有工作,当我发出以下命令时,我收到了这个错误。
mysql> delete from company_jobs;
错误1451(23000):无法删除或更新父行:异类 密钥约束失败(
test
。applied
,CONSTRAINTapplied_ibfk_2
外键(jcode
)RE FERENCEScompany_jobs
(jcode
))
如果有人可以,请帮帮我。谢谢
答案 0 :(得分:1)
从应用于company_job的表中指向的第一个外键没有任何级联规则,因此它可以简单地阻止从company_job中删除;
请参阅mysql dump bellow
ALTER TABLE `applied`
ADD CONSTRAINT `applied_ibfk_1` FOREIGN KEY (`regno`) REFERENCES `general` (`regno`),
ADD CONSTRAINT `applied_ibfk_2` FOREIGN KEY (`jcode`) REFERENCES `company_jobs` (`jcode`),
ADD CONSTRAINT `fk_jcode16` FOREIGN KEY (`jcode`) REFERENCES `company_jobs` (`jcode`) ON DELETE CASCADE,
ADD CONSTRAINT `fk_regno14` FOREIGN KEY (`regno`) REFERENCES `general` (`regno`) ON DELETE CASCADE;
您需要先删除外键,或重新创建没有第一个外键的表
ALTER TABLE 'applied' DROP CONTRAINT 'applied_ibfk_2';
答案 1 :(得分:1)
创建applied
表时,您创建了2个外键。
之后,您在此表中添加了2个其他外键。
如您所见,该错误引用了一个名为applied_ibfk_2
的外键,该外键不是您在创建后添加的外键。
因此,在该表上有4个外键约束的那一刻。
所以,你必须删除在创建表时创建的2个外键(具有预定义的名称),一切都会正常工作