mysql 删除重复的数据有很多种方式。
有一条sql语句就搞定的,但是mysql不支持delete from table where id in ( ............).
但是mysql 有一种join的写法,但是比较怪异。
DELETE t1 FROM test_an AS t1,(
SELECT MIN(order_id) AS order_id FROM test_an GROUP BY order_no HAVING COUNT(1)>1
) AS t2 WHERE t1.order_id=t2.order_id;
具体相关描述可以见mysql官网。
如果删除的数据量非常大,不建议采用这种方法。
可以分步骤建立中间表。
第一步备份一张表
create table tmp_users like users; (create table like 和 create table select 的区别 ,create table like 复制的表结构包含索引 而 create table select 不包含索引,没有索引对业务影响很大,这个要特别留意的)
第二步把需要保留数据保存下来
通过类似这样的sql
SELECT MIN(order_id) AS order_id FROM test_an GROUP BY order_no HAVING COUNT(1)>1
第三步删除原表,把中间表名rename