mysql删除重复索引_mysql 删除重复数据 建立联合唯一索引

由于之前设计表考虑不周导致存在重复数据,需要建立唯一索引失败,所以需先删除重复数据!

be2730212657c897875a1ea534a3fc89.png

本例中,需要建立用户和门禁的联合唯一索引

1.先查询所有的重复数据

SELECT

*

FROM

`user_accesscontrol_auth`

WHERE

( `user_name`, `access_control_id` ) IN ( SELECT `user_name`, `access_control_id` FROM `user_accesscontrol_auth` GROUP BY `user_name`, `access_control_id` HAVING COUNT( 1 ) > 1 );

e7d12c8017e4418c094a4a65ce44e83b.png

以上查询都是重复的记录!

2. 将重复的条目中ID更大的所有条目都删除,只留ID最小的那一个。(29万数据量,912条重复记录)

DELETE FROM `user_accesscontrol_auth`

WHERE (`user_name`, `access_control_id`) IN (SELECT `user_name`, `access_control_id` FROM (SELECT * FROM `user_accesscontrol_auth`) a GROUP BY `user_name`, `access_control_id` HAVING COUNT(1) > 1)

AND `id` NOT IN (SELECT MIN(`id`) FROM (SELECT * FROM `user_accesscontrol_auth`) b GROUP BY `user_name`, `access_control_id` HAVING COUNT(1) > 1);

删除重复记录保留一条:https://mp.weixin.qq.com/s/4ua_YF-Jbc89SA75Z9tNgg

3.数据删除成功后可建立user_name 和 access_control_id的联合唯一索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值