由於之前設計表考慮不周導致存在重復數據,需要建立唯一索引失敗,所以需先刪除重復數據!
本例中,需要建立用戶和門禁的聯合唯一索引
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的聯合唯一索引