MySQL Error 1452:插入album_cancao时外键约束失败求助
排查SpotifyClone数据库的外键约束错误(Error 1452)
运行以下SQL脚本创建并插入SpotifyClone数据库数据时,触发外键约束错误:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (
SpotifyClone.album_cancao, CONSTRAINTalbum_cancao_ibfk_1FOREIGN KEY (album_id) REFERENCESalbum(album_id))
尝试调换album_cancao和artista_album的插入顺序,问题未解决。
错误根源
album_cancao插入数据不匹配
查看album表的插入记录,仅包含album_id从1到8的8条数据,但album_cancao的插入语句中使用了album_id=9和album_id=10,这两个ID在album表中不存在,直接违反外键约束:
INSERT INTO SpotifyClone.album_cancao (album_id, cancao_id) VALUES ('1', '1'), ('2', '1'), ('3', '1'), ('4', '2'), ('5', '3'), ('6', '4'), ('7', '5'), ('8', '6'), ('9', '7'), -- 此album_id不存在于album表 ('10', '8'); -- 此album_id不存在于album表
artista_album同样存在数据不匹配问题artista表仅插入了artista_id从1到6的6条数据,但artista_album的插入语句中使用了artista_id=7和artista_id=8,同样会触发外键错误:
INSERT INTO SpotifyClone.artista_album (artista_id, album_id) VALUES ('1', '1'), ('2', '2'), ('3', '2'), ('4', '3'), ('5', '3'), ('6', '4'), ('7', '5'), -- 此artista_id不存在于artista表 ('8', '6'); -- 此artista_id不存在于artista表
修复方案
根据业务需求选择以下两种方式之一:
方式一:修正关联表的插入数据
删除关联表中引用不存在主键的记录,确保所有外键值都在父表中存在:
- 修正后的
album_cancao插入语句:
INSERT INTO SpotifyClone.album_cancao (album_id, cancao_id) VALUES ('1', '1'), ('2', '1'), ('3', '1'), ('4', '2'), ('5', '3'), ('6', '4'), ('7', '5'), ('8', '6');
- 修正后的
artista_album插入语句:
INSERT INTO SpotifyClone.artista_album (artista_id, album_id) VALUES ('1', '1'), ('2', '2'), ('3', '2'), ('4', '3'), ('5', '3'), ('6', '4');
方式二:补充父表缺失的记录
如果业务上需要保留关联表的所有记录,先在album和artista表中插入对应的缺失数据,再执行关联表的插入操作。
内容的提问来源于stack exchange,提问作者Pedro Pugas
相关产品推荐
相关产品推荐

