首页 > 数据库 > mysql教程 > 为什么由于违反外键约束而无法删除父行?

为什么由于违反外键约束而无法删除父行?

Susan Sarandon
发布: 2025-01-14 16:21:44
原创
232 人浏览过

Why Can't I Delete a Parent Row Due to a Foreign Key Constraint Violation?

违反外键约束:删除或更新父行

尝试从 jobs 表(父表)删除记录会导致外键约束冲突错误。 错误消息引用 advertisers 表,特别是 advertisers_ibfk_1 约束,它将 advertisers.advertiser_id 链接到 jobs.advertiser_id。这种依赖关系可以防止删除或修改父行。

根本原因在于数据库架构:

<code class="language-sql">CREATE TABLE `advertisers` (
  `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  ...
  PRIMARY KEY (`advertiser_id`),
  FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`)
);

CREATE TABLE `jobs` (
  `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `advertiser_id` int(11) unsigned NOT NULL,
  ...
  PRIMARY KEY (`job_id`)
);</code>
登录后复制

advertisers 表中的外键约束要求每个 advertiser_id 必须在 jobs 表中具有相应的条目。 如果某个职位(例如,job_id = 1)与广告商 (advertiser_id = 1) 关联,则删除该职位会使 advertiser_id 表中的 advertisers 变得孤立,从而违反约束。数据库会阻止此操作以保持数据完整性。

解决约束违规

解决方法包括暂时禁用外键检查:

<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks
DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1;
SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
登录后复制

这会绕过约束强制,从而允许删除。 至关重要的是,事后重新启用检查对于恢复数据库完整性至关重要。 然而,这是一个临时解决方案。 更强大的方法将涉及级联删除(ON DELETE CASCADE)或在从 advertisers.jobs 删除之前正确管理

表中的相关数据

以上是为什么由于违反外键约束而无法删除父行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板