mysql - 将外键添加到现有表(错误 1451)
问题描述
我有两个带有外键的表,但是当从“fb_campaign”中删除一条记录时出现以下错误:
#1451 - 无法删除或更新父行:外键约束失败 ( mydb
. fb_campaign_cat
, CONSTRAINT fb_campaign_cat_ibfk_1
FOREIGN 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);
解决方案
简单的方法是禁用外键检查;进行更改然后重新启用外键检查。
SET FOREIGN_KEY_CHECKS=0; -- to disable them
SET FOREIGN_KEY_CHECKS=1; -- to re-enable them
推荐阅读
- c# - 我们如何从谷歌搜索控制台获取具有域(sc-domain)属性的站点的站点地图?
- java - 如何在 JSch 中设置文件类型和文件传输模式?
- kubernetes - k8s HA 多主对主机数量的要求?
- java - Runtime.exec() 和在 android 的终端中运行 shell 命令有什么区别
- fullcalendar - DayGrid 视图中的时隙
- ios - iOS 中的 React Native 60 及以上边距问题 - 忽略虚假层大小
- android - 如何从android通过服务器中的文件发送json数据?
- android - 在 Android 上设置屏幕保护程序的延迟
- excel - Lotusscript Excel VBA 正确语法 (SUBSTITUTE)
- tensorflow - 如何对中间层特征强制执行概率分布?