You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:34:59