由于网络阻塞,高并发造成生产环境下数据库中的数据重复!!!
#所有的去重是将表中多于的记录去重 只有一条的保留 多条重复记录的话只保留ID最小的一个
#userrecoder表的SQL去重userrecoder学生使用记录表,多个字段,记录的重复是根据学生的id studentId,模块 module,开始时间 beginTime,分数 score这四个字段,完全相同才能判断是同一个字段的!
可以根据自己的实际情况套用这个SQL,根据自己的业务去判断重复
DELETE
FROM
userrecoder
WHERE
beginTime >= '2017-11-03 15:00:00'
AND id NOT IN (
SELECT
id
FROM
(
SELECT
MIN(id) AS id,
count(studentId) AS count
FROM
userrecoder
WHERE
beginTime >= '2017-11-03 15:00:00'
GROUP BY
studentId,module,beginTime,score
HAVING
count(studentId) >= 1
) m
);
其中 not in 里面的数据是要保留的数据!
网上有的sql的HAVING后面跟的count>1(此处是大坑),注意这样是不对的,如果是count>1这样的话会将原本只有一条的记录删除!!!
还有要注意如果表中的数据有时间限制,要删除某一时间段内的重复数据,一定要在每个范围内加上时间的区间!!!
一般删除操作还是相对危险的,一不小心就会跑路,一定要记得备份!!!
写好的SQL最好在本地模拟数据去删除的试一试!!!