Mysql:如何删除所有违反UNIQUE约束的重复记录。
Mysql:如何删除所有违反UNIQUE约束的重复记录。
我想向表中添加一个唯一索引,就像这样:
ALTER TABLE `mytable` ADD UNIQUE `myunique_name`(`first`, `second`, `third`);
Mysql的回应是:
键'myunique_name'上的重复条目'1-2-3'
我确信这个组合只是成千上万违反约束的情况之一。
在这种特殊情况下,我确定在这三个指定列中具有相同值的所有行也在其他相关字段中包含相同的数据(主键当然不同,但无关紧要),因此所有的重复项都可以被删除。
有没有办法删除所有重复的条目但保留一个(不管保留哪个主键),以便可以添加唯一索引?
MySQL:如何删除违反唯一约束的所有重复项
在上面的代码中,首先创建了一个名为MyTable的临时表,然后插入了一些数据。这些数据包括id、col1、col2和col3四个字段。其中有两个重复的记录,分别是id为1和2的记录。
接下来,创建了一个名为MyDuplicateTableWithCount的临时表,通过对MyTable进行分组和聚合操作,找出了所有重复的记录,并计算了重复的次数。通过使用having子句,筛选出重复次数大于1的记录。
然后,通过将MyTable和MyDuplicateTableWithCount进行内连接,找出了所有重复的记录,并按照id进行排序。
在找到重复的id后,可以使用delete语句从MyTable中删除这些重复的记录。其中,使用了in子句来指定要删除的id,即(5,6)。
另外,还可以使用另一种方法来删除重复的记录。首先,创建一个名为MyTable2的临时表,通过对MyTable进行分组和聚合操作,找出每组记录中的最小id,并保留其他字段的值。然后,通过左连接将MyTable和MyTable2进行关联,找出MyTable中不存在于MyTable2的记录,并进行删除操作。
以上就是解决删除违反唯一约束的所有重复项的方法。可以根据实际情况选择合适的方法来处理重复数据。