MySQL插入songs表报1452外键约束错误,两张表均为空如何解决?
问题原因
songs表通过CONSTRAINT songs_ibfk_1设置了外键约束,表内artist字段关联父表images的artist字段。外键约束的核心规则为子表(此处为songs表)插入、更新记录时,外键字段的取值必须在父表(此处为images表)的关联字段中已存在。
你当前两张表均为空,images表中不存在artist值为x的记录,因此插入songs表的操作触发约束校验失败,返回1452错误。
解决办法
- 优先方案:先插入父表记录,再插入子表记录
先执行SQL向images表插入对应artist的记录:
INSERT INTO `images` (`artist`, 其他images表必填字段名) VALUES ('x', 对应字段的取值);
再执行你原来的songs插入语句即可成功。
- 方案二:修改字段属性适配业务
如果业务允许歌曲暂不关联艺术家图片,可以将songs表的artist字段修改为允许NULL,插入时该字段传NULL,等后续images表有对应记录后再更新回填。 - 方案三:删除外键约束
如果确定不需要通过数据库层面维护两张表的关联关系,可以直接删除该外键约束:
ALTER TABLE `songs` DROP FOREIGN KEY `songs_ibfk_1`;
- 临时方案(仅测试环境可用,禁止生产环境使用):临时关闭外键校验
插入前关闭外键检查,插入完成后重新开启,跳过本次约束校验:
SET FOREIGN_KEY_CHECKS = 0; -- 执行你的插入语句 INSERT INTO `songs` (`id`, `name`, `artist`, `year`, `audio`) VALUES ('0', 'x', 'x', '1000', 'x.mp3'); SET FOREIGN_KEY_CHECKS = 1;
内容的提问来源于stack exchange,提问作者Euronymous
相关产品推荐
相关产品推荐

