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

如何删除MySQL表重复business_id数据并添加唯一约束?

解决MySQL重复记录删除并添加唯一约束的方法

没问题,我来帮你搞定这个MySQL重复记录的问题!要给business_id加上唯一约束,得先清理掉重复的记录,只保留每个business_id对应id最大的那条,具体步骤如下:

1. 先验证要保留的记录(可选但推荐)

先执行这条查询,确认每个business_id对应的最大id是哪些,避免后续删除出错:

SELECT business_id, MAX(id) AS keep_id
FROM my_table
GROUP BY business_id;

你也可以直接查看将要被删除的记录,确保逻辑正确:

SELECT t1.*
FROM my_table t1
JOIN (
    SELECT business_id, MAX(id) AS keep_id
    FROM my_table
    GROUP BY business_id
) t2 ON t1.business_id = t2.business_id
WHERE t1.id != t2.keep_id;

2. 删除重复记录(仅保留最大id的条目)

这里提供两种可靠的写法,任选其一即可:

方法一:使用JOIN删除

DELETE t1
FROM my_table t1
JOIN (
    SELECT business_id, MAX(id) AS keep_id
    FROM my_table
    GROUP BY business_id
) t2 ON t1.business_id = t2.business_id
WHERE t1.id != t2.keep_id;

方法二:使用子查询(需嵌套临时表)

MySQL不允许直接在DELETE的WHERE子查询中引用当前被操作的表,所以需要嵌套一层临时表来规避这个限制:

DELETE FROM my_table
WHERE id NOT IN (
    SELECT keep_id FROM (
        SELECT MAX(id) AS keep_id
        FROM my_table
        GROUP BY business_id
    ) AS temp_table
);

重要提示:执行删除操作前,一定要先备份数据,或者用上面的SELECT语句验证要删除的记录,避免误删重要数据!

3. 添加唯一约束

清理完重复记录后,就可以给business_id添加唯一约束了:

ALTER TABLE my_table
ADD CONSTRAINT unique_business_id UNIQUE (business_id);

这样后续就不会再出现business_id重复的记录啦!

内容的提问来源于stack exchange,提问作者MMacphail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:50