我有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中删除。实际上,所有表都必须对应用的表具有某种值,正如从表的结构中可以看到的那样。我使用这些命令添加DELETE级联约束:
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):无法删除或更新父行:外键约束nt失败(
test.applied,约束applied_ibfk_2外键(jcode) RE constraicompany_jobs(jcode))
如果可以的话请帮帮我。谢谢
发布于 2015-10-05 18:49:58
创建applied表时,您创建了2个外键。
在此之后,您还向此表添加了另外两个外键。
如您所见,错误引用一个名为applied_ibfk_2的外键,它不是在创建之后添加的外键。
因此,在该表上有4个外键约束的时刻。
因此,您必须删除在表创建中创建的2个外键(该外键具有预定义的名称),一切都将正常工作。
发布于 2015-10-05 18:44:33
从表中指向company_job的第一个外键没有任何级联规则,因此它简单地阻止了company_job中的删除;
见mysql转储波纹管
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';https://stackoverflow.com/questions/32955265
复制相似问题