事情:在按内容类型推荐功能上出现重复的数据
需求:找出重复数据并删除
难点:因两条数据一模一样,没有可区分的标识
思路:需要有一个可区分的标识,然后找出重复数据,并根据这个标识的不同来删除。
反思:为什么会存在重复的数据
1: 应用层没有做校验,如数据已存在时要做的是update
2: 数据库层没有做保障,如没有设置主键
具体步骤:
- 创建一张临时表
CREATE TABLE IF NOT EXISTS EPG_CONTENT_BACK (LIKE EPG_CONTENT);
- 可临时表加个ID
alter table EPG_CONTENT_BACK add id int
- 给ID 设置成主键
alter table `EPG_CONTENT_BACK` change id id int not null auto_increment primary key;
- 获取所有字段
desc EPG_CONTENT
- 将原表数据复制到 临时表
insert into EPG_CONTENT_BACK(CONTENT_ID,CONTENT_CODE) select CONTENT_ID,CONTENT_CODE from EPG_CONTENT;
- 找到重复的数据,验证是否正确
select id,CONTENT_ID from EPG_CONTENT_BACK group by CONTENT_ID having count(*)>1 ORDER BY CONTENT_ID DESC;
select * from EPG_CONTENT WHERE CONTENT_ID= ''
- 再创建临时表-把ID重复的写入临时表
CREATE TABLE TEMP1 AS select id from EPG_CONTENT_BACK group by CONTENT_ID having count(*)>1 ORDER BY CONTENT_ID DESC;
- 根据临时表ID,删除临时数据表 EPG_CONTENT_BACK
DELETE FROM EPG_CONTENT_BACK WHERE ID IN (SELECT ID FROM TEMP1)
DROP TABLE TEMP1;
循环6、7、8步,直到没有重复数据
- 将已清理好的数据,复制会员表
DELETE FROM EPG_CONTENT;
insert into EPG_CONTENT(CONTENT_ID,CONTENT_CODE) select CONTENT_ID,CONTENT_CODE,EXTERNAL_CODE from EPG_CONTENT_BACK;
网友评论