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

如何将MySQL中sample_tag表的两个外键设为联合主键?

问题解答

可以在不新建表的前提下,将sample_id和tag_id设为联合主键,但必须先清理表中重复的(sample_id, tag_id)组合记录——因为MySQL的主键约束要求字段组合必须唯一,现有重复记录会导致主键创建失败。

步骤1:清理重复记录

首先需要找出并删除重复的记录,以下提供几种可行的SQL方案:

方案1:查看重复项(可选)

先确认哪些组合存在重复:

SELECT sample_id, tag_id, COUNT(*) AS 重复次数
FROM sample_tag
GROUP BY sample_id, tag_id
HAVING COUNT(*) > 1;

方案2:删除重复记录(MySQL 8.0+适用)

保留每组重复记录中的第一条,删除其余:

DELETE t1
FROM sample_tag t1
JOIN (
    SELECT sample_id, tag_id, 
           ROW_NUMBER() OVER (PARTITION BY sample_id, tag_id ORDER BY sample_id) AS 行号
    FROM sample_tag
) t2 ON t1.sample_id = t2.sample_id AND t1.tag_id = t2.tag_id
WHERE t2.行号 > 1;

方案3:低版本MySQL兼容方案

如果你的MySQL版本低于8.0(不支持窗口函数),可以用临时表中转(临时表不属于新建正式表,符合要求):

-- 创建临时表存储唯一的组合
CREATE TEMPORARY TABLE temp_unique_tags
SELECT DISTINCT sample_id, tag_id FROM sample_tag;

-- 清空原表
TRUNCATE TABLE sample_tag;

-- 将唯一数据导回原表
INSERT INTO sample_tag (sample_id, tag_id)
SELECT sample_id, tag_id FROM temp_unique_tags;

步骤2:设置联合主键

清理完重复记录后,执行以下SQL即可将两个字段设为联合主键:

ALTER TABLE sample_tag
ADD PRIMARY KEY (sample_id, tag_id);

补充说明

  • 如果跳过清理步骤直接创建主键,MySQL会抛出Duplicate entry错误,提示存在重复键值。
  • 在phpMyAdmin中也可以通过图形界面操作:先执行查询删除重复项,再进入表结构页面,同时选中sample_id和tag_id字段,点击顶部的「主键」按钮完成设置,底层执行的就是上述ALTER TABLE语句。

内容的提问来源于stack exchange,提问作者Diamaudix Audio Ltd.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:15:51