php – 清理冗余数据的db

Locid   country city
39409   US  Aaronsburg
128426  US  Aaronsburg
340356  US  Aaronsburg
429373  US  Aaronsburg
422717  US  Abbeville
431344  US  Abbeville
433062  US  Abbeville
341726  US  Abbeville
421248  US  Abbeville
40779   US  Abbeville
326718  US  Abbeville
317654  US  Abbeville
16707   US  Abbeville
25771   US  Abbeville
120301  US  Abbeville
132115  US  Abbeville
121770  US  Abbeville
130397  US  Abbeville
5585    US  Abbeville
10227   US  Abbeville
190173  US  Abbeville
491120  US  Abbeville
311174  US  Abbeville
306532  US  Abbeville
164271  US  Abbot
465218  US  Abbot
58452   US  Abbotsford
359399  US  Abbotsford
309116  US  Abbotsford
8169    US  Abbotsford

有人可以给我一个SQL查询来帮我清理这个表吗?
清理Locid(索引)之后应该重置,顺便说一下这是一个县城使用这个查询SELECT Locid,country,city FROM location WHERE country =’US’ORDER BY city ASC.当我通过PHPmyadmin的导入多次导入sql文本时出现这个冗余数据,这就是结果,

解决方法:

在表位置添加唯一索引,以便不会插入重复的记录

ALTER IGnorE TABLE location ADD UNIQUE KEY ix1(country, city);

这将自动从表中删除重复记录,并且对于将来的插入查询,您需要使用INSERT IGnorE子句以避免出现重复错误.

但正如@ AD7six在评论中所建议的,它可能不适用于MysqL版本5.1.41,5.5.1-m2,6.0:请参阅错误here

或使用DELETE查询删除重复项的备用安全方法

DELETE a
FROM location a
     LEFT JOIN (
                SELECT Locid
                FROM location
                GROUP BY country, city
               )b
               ON a.Locid = b.Locid
WHERE b.Locid IS NULL;

要重置auto_increment列Locid的值,您只需将主键放在Locid上并重新创建它:

ALTER TABLE location DROP column Locid;
ALTER TABLE location 
      ADD COLUMN Locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FirsT;

或者使用UPDATE查询重置Locid值的替代方法

SET var_Locid = 0;

UPDATE location
SET Locid = (@var_Locid := @var_Locid + 1)
ORDER BY Locid ASC;

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...