前两天由于操作失误,将线上的数据库一表中插入了近六万条的重复记录,其中有用的数据也就几千条。那几万 条的重复数据的删除是个问题,因为整个表现在已经有二十多万的数据,一开始使用两个select 加group by来进行分组后删除,不过语句执行不了,一运行那mysql直接卡掉了…
不知为什么二十万的数据就能直接把mysql给搞死。。。难道语句有问题?后来又试了下使用left join 更是坑爹。。。作为一个菜鸟,还是应该多问baidu和google。在网上找了个方法可以直接解决这些重复数据的删除问题,虽然可能这个方法不是很好,但最起码解决了我的问题。
方法是使用唯一索引这个功能,给重复的那个字段创建唯一索引来让mysql自动删除重复记录,具体语句实例如下:
alter ignore table yourtablename add unique idx_name (test);
这里是给yourtablename表中的test字段创建唯一索引的语句,运行后会将test字段的值变成唯一,重复的数据都将会被删除。
由于我是只删除某一时段的数据,所以我这里使用的是一个笨办法,先将原表导出,将这个区间内的所有insert记录都剪贴出来导入本地库中,然后执行上面的语句创建唯一索引,执行后将结果导出,把insert 的记录语句重新贴回去,再导入线上库中完成!
操作数据库时切记进行备份!!