首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql与外键和删除级联相关的问题

问Mysql与外键和删除级联相关的问题
EN

Stack Overflow用户
提问于 2015-10-05 18:20:30
回答 2查看 567关注 0票数 0

我有4个sql表。

代码语言:javascript
复制
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级联约束:

代码语言:javascript
复制
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;

但不幸的是,它不起作用,当我发出以下命令时,我会收到这个错误。

代码语言:javascript
复制
mysql> delete from company_jobs;

错误1451 (23000):无法删除或更新父行:外键约束nt失败(test.applied,约束applied_ibfk_2外键(jcode) RE constrai company_jobs (jcode))

如果可以的话请帮帮我。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 18:49:58

创建applied表时,您创建了2个外键。

在此之后,您还向此表添加了另外两个外键。

如您所见,错误引用一个名为applied_ibfk_2的外键,它不是在创建之后添加的外键。

因此,在该表上有4个外键约束的时刻。

因此,您必须删除在表创建中创建的2个外键(该外键具有预定义的名称),一切都将正常工作。

票数 1
EN

Stack Overflow用户

发布于 2015-10-05 18:44:33

从表中指向company_job的第一个外键没有任何级联规则,因此它简单地阻止了company_job中的删除;

见mysql转储波纹管

代码语言:javascript
复制
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;

您需要先删除外键,或者在没有第一个外键的情况下重新创建表。

代码语言:javascript
复制
ALTER TABLE 'applied' DROP CONTRAINT 'applied_ibfk_2';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32955265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档