当前位置: 首页 > 面试题库 >

清理数据库的冗余数据

宇文俊风
2023-03-14
问题内容
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:请参见此处的错误

或使用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_incrementcolumn的值,locid只需将primary keyon 放下locid并重新创建它:

ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

locid使用UPDATE查询重新设置值的替代方法:

SET var_locid = 0;

UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;


 类似资料:
  • 问题内容: Hibernate会生成包含所有列的语句,无论我是否更改了这些列中的值,例如: 发表以下声明: 因此B,C,D列已更新,而我没有更改它们。 说,项目会经常更新,并且所有列都已建立索引。 问题是:将Hibernate部分优化为如下所示是否有意义: 最让我困惑的是,“未优化”和“优化”查询版本的计划是相同的! 问题答案: 由于PostgreSQL MVCC,an 实际上更像是plus 。除

  • Seahub 清理 Session 数据库 清理 Session 表: cd <install-path>/seafile-server-latest ./seahub.sh clearsessions 文件活动 (Activity) 要清理文件活动表,登录到 MySQL/MariaDB,然后使用以下命令: use seahub_db; DELETE FROM Event WHERE to_day

  • 问题内容: Google讨论了有关清理Web访问查询的各种讨论,但我找不到任何解决我所关注的问题的方法: 在ac#程序中清理用户输入数据。这必须通过可逆的转换来完成,而不是通过移除来完成。作为问题的简单示例,我不想破坏爱尔兰的名字。 最好的方法是什么,有没有执行此功能的库函数? 问题答案: 这取决于您所使用的SQL数据库。例如,如果要在MySQL中使用单引号文字,则需要使用反斜杠Dangerous

  • 我是Java的新手,正在处理一个家庭作业问题。该问题指定使用一个构造函数创建一个Temperature类,该构造函数接受华氏温度(作为double)并将其存储在字段中。setFahrenheit方法接受一个华氏温度(以双倍数形式),并将其存储在字段中。 这在我看来是多余的。setFahrenheit方法不是和构造函数完全一样吗?

  • 我的模型中有一个,我无法清除资源上的初始导入,因此导入的数据被视为字符串而不是列表。当我导出数据时,它如下所示: 下面的数据来自初始的,没有定制的。上面这些是已清理的数据。 然后如何使用修复当前的并将其转换为?

  • 注意中的复制。有没有办法避免这种复制?