由于没有对数据库做索引,发现搜索表格好多重复数据,看着很是不舒服而且占用内存。下面介绍一下我删除表中重复数据的思路。
我的大概思路是:先按某一个字段(这个字段不重复数据)读取该表并创建一个临时表tmp,再将原来那个表清空,再将这个临时表里面的数据插入原始表中,再把临时表删除。
首先:读取不重复数据创建临时表tmp
CREATE TABLE tmp SELECT * FROM table GROUP BY (title);
上面的sql就是从table表中按title字段读取非重复数据创建临时表tmp,group by()中的字段可以是多个。这样做这个tmp里面的数据便是table表中所有的非重复数据。
接着:清空table表。
TRUNCATE table;
使用TRUNCATE清空表有个好处就是会把自增自段重置。
再来:将上面创建的tmp表中的数据插入原来的table表中。
insert into table (title,viewnum,countnum,istop,source,etime) select title,viewnum,countnum,istop,source,etime from tmp;
通过insert into将tmp表中的数据插入table表中。
这里需要注意一件事,insert into table (字段1,字段2...)不需要写values直接再用select选取tmp表中的对应字段。参看我上面的sql意思就是从tmp表里面将title等字段的值一一对应的插入table表中。注意:自增字段不用填写,要是填了自增字段,也可以正常运行,只是会造成自增字段并不是自增的而是指定的,所以还是不填自增字段的好。
最后:删除tmp表。
DROP TABLE tmp;
这个时侯再看table表就会发现不仅没有重复字段了,而且自增字段又从1开始了。
简单4条SQL语句处理表中重复数据,比较适用。