首页 > 解决方案 > 将外键添加到现有表(错误 1451)

问题描述

我有两个带有外键的表,但是当从“fb_campaign”中删除一条记录时出现以下错误:

#1451 - 无法删除或更新父行:外键约束失败 ( mydb. fb_campaign_cat, CONSTRAINT fb_campaign_cat_ibfk_1FOREIGN KEY ( id) REFERENCES fb_campaign( id_cat))

添加第二个外键时出现问题。

表 1:fb_campaign_cat

+----+-----------+
| id |   fb_cat  |
+----+-----------+
|  1 | category1 |
|  2 | category2 |
|  3 | category3 |
+----+-----------+

表 2:fb_campaign

+-------+--------+-----------+
| id_fb | id_cat |   name    |
+-------+--------+-----------+
|     1 |      1 | campaign1 |
|     2 |      2 | campaign2 |
+-------+--------+-----------+

** 架构 **

CREATE TABLE `fb_campaign_cat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fb_cat` varchar(30) CHARACTER SET utf8mb4 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `fb_campaign` (
  `id_fb` int(11) NOT NULL AUTO_INCREMENT,
  `id_cat` int(11) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

外键

ALTER TABLE fb_campaign
ADD CONSTRAINT fb_campaign_cat 
FOREIGN KEY (id_cat) 
REFERENCES fb_campaign_cat(id) 
ON DELETE CASCADE;


ALTER TABLE fb_campaign_cat
ADD FOREIGN KEY (id) REFERENCES fb_campaign(id_cat);

标签: mysqlforeign-keys

解决方案


简单的方法是禁用外键检查;进行更改然后重新启用外键检查。

SET FOREIGN_KEY_CHECKS=0; -- to disable them
SET FOREIGN_KEY_CHECKS=1; -- to re-enable them

推荐阅读