Navicat使用教程:如何在MySQL中定位和删除有重复意义的值

本篇文章介绍了如何识别MySQL中的重复数据,以及如何删除它们而不删除宝贵的有效数据。

下载Navicat Premium最新版本

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。

DBA最大的麻烦之一是处理重复数据。不管我们如何防范,重复数据总是会设法进入到表格。重复数据是一个大问题,因为它会影响应用程序视图(每个项都应该是唯一的)、扭曲统计信息,在严重情况下还会增加服务器开销。

在本技巧中,我们将学习如何识别MySQL中的重复数据,以及如何删除它们而不删除宝贵的有效数据。

Navicat

重复类型

您将遇到的大多数重复记录是两种不同类型之一:重复含义和非唯一键。在本篇文章中,我们将处理重复含义;在下篇文章中,我们将处理非唯一键。

当副本不是副本时

重复意义是最常见的重复类型。在这种情况下,两个或多个字段的内容不相同,但它们的含义是相同的。你可以把它看作是语义上的重复数据。

考虑下表摘录:

movie_namemedia---------------------------ACADEMY DINOSAURTheatreACE GOLDFINGERTelevisionADAPTATION HOLESTheatreAFFAIR PREJUDICETheatreAFRICAN EGGTV

在媒体专栏中,“Television”和“TV”两个词条的含义相同,但表达方式不同。这个问题通常是由使用自由文本输入引起的,有限的下拉列表是更好的选择。

这种类型的复制处理起来非常困难,因为不能使用select distinct排除重复项。

有两种方法可以解决这个问题:

1.使用replace()选择数据,将不需要的值替换为希望看到的值:

SELECT DISTINCTmovie_name,REPLACE(media, "TV", "TELEVISION") as media,FROM films;

2.更新实际表数据。下面是一个声明,用首选的“TELEVISION”值更新“TV”的所有实例:

UPDATE filmsSET media = REPLACE(media, "TV", "TELEVISION")WHERE media = "TV";

下面是一个真实的例子!

一些不需要的卷曲撇号进入了数据。注意“O’BRIEN”和“O’BRIEN”条目:

first_namelast_name---------------------PENELOPEGUINESSCONANO'BRIENEDCHASEJENNIFERDAVISCONANO'BRIEN

我们可以像上面那样处理这个问题:

1.使用replace()选择数据,用常规的单引号替换大撇号,这样我们就可以始终处理相同的字符:

SELECT DISTINCTfirst_name,REPLACE(last_name, "'", "'") as last_name,FROM actorsWHERE REPLACE(last_name, "'", "'") like "O'BRIEN";

2.更新实际表数据。此语句用常规单引号更新姓氏列中的所有撇号:

UPDATE actorsSET last_name = REPLACE(last_name, "'", "'")WHERE last_name like "%'%";

结论

重复记录、双精度、冗余数据、重复行;无论您如何称呼它们,它们都是DBA生命中最大的缺陷之一。然而,重要的是要定期清除它们,以免产生错误的统计数据并混淆与数据库交互的用户。

购买Navicat Premium正版授权,请点击“咨询在线客服”哟!

PyCharm

标签:数据库mysqloracle

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月25日
下一篇 2019年1月26日

相关推荐

发表回复

登录后才能评论