MySQL中外键关联主键时出现Error Code:3780错误求助
错误原因及修正方案
核心错误点
- 数据类型不兼容:你试图用
songs表的VARCHAR类型字段song_name关联artists表的INT类型主键artist_id,MySQL要求外键列与被引用列必须数据类型完全匹配(包括类型、长度、符号属性等),这是直接触发错误代码3780的原因。 - 业务逻辑错误:歌曲与艺术家的关联逻辑应为「某首歌属于某个艺术家」,因此
songs表需要存储的是艺术家的ID(artist_id),而非用歌曲名称去关联艺术家ID——这完全不符合关联关系的设计原则。
修正步骤
1. 修正songs表结构并创建正确的外键
先给songs表添加与artists表匹配的artist_id字段,再创建外键约束:
-- 添加与artists表类型一致的artist_id字段 ALTER TABLE songs ADD COLUMN artist_id INT; -- 创建正确的外键关联 ALTER TABLE songs ADD FOREIGN KEY (artist_id) REFERENCES artists (artist_id);
2. 优化charts表结构(可选但推荐)
当前charts表设计存在冗余和逻辑问题:
song_id自增作为主键不符合关联逻辑,应该关联songs表的song_id- 存储
song_name属于冗余数据,可通过song_id关联songs表获取
修正后的charts表创建语句:
DROP TABLE IF EXISTS charts; CREATE TABLE charts( chart_id INT PRIMARY KEY AUTO_INCREMENT, -- 用独立的图表ID作为主键 song_id INT, weeks_on_chart INT, top_rank INT, -- 关联songs表的主键 FOREIGN KEY (song_id) REFERENCES songs (song_id) );
内容的提问来源于stack exchange,提问作者lakritssnöre
相关产品推荐
相关产品推荐

