mysql 刪除重復數據 建立聯合唯一索引


由於之前設計表考慮不周導致存在重復數據,需要建立唯一索引失敗,所以需先刪除重復數據!

本例中,需要建立用戶和門禁的聯合唯一索引

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 );

以上查詢都是重復的記錄!

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的聯合唯一索引

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM