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

下载Navicat Premium最新版本数据库

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

DBA最大的麻烦之一是处理重复数据。无论咱们如何防范,重复数据老是会设法进入到表格。重复数据是一个大问题,由于它会影响应用程序视图(每一个项都应该是惟一的)、扭曲统计信息,在严重状况下还会增长服务器开销。工具

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

Navicat

重复类型

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

当副本不是副本时

重复意义是最多见的重复类型。在这种状况下,两个或多个字段的内容不相同,但它们的含义是相同的。你能够把它看做是语义上的重复数据。code

考虑下表摘录:blog

1ci

2rem

3get

4

5

6

7

movie_name  media

---------------------------

ACADEMY DINOSAUR    Theatre

ACE GOLDFINGER  Television

ADAPTATION HOLES    Theatre

AFFAIR PREJUDICE    Theatre

AFRICAN EGG TV

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

这种类型的复制处理起来很是困难,由于不能使用select distinct排除重复项。

有两种方法能够解决这个问题:

1.使用replace()选择数据,将不须要的值替换为但愿看到的值:

1

2

3

SELECT DISTINCT movie_name,

REPLACE(media, "TV""TELEVISION"as media,

FROM films;

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

1

2

3

UPDATE films

SET media = REPLACE(media, "TV""TELEVISION")

WHERE media = "TV";

下面是一个真实的例子!

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

1

2

3

4

5

6

7

first_name  last_name

---------------------

PENELOPE    GUINESS

CONAN   O'BRIEN

ED  CHASE

JENNIFER    DAVIS

CONAN   O'BRIEN

咱们能够像上面那样处理这个问题:

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

1

2

3

4

SELECT DISTINCT first_name,

REPLACE(last_name, "'""'"as last_name,

FROM actors

WHERE REPLACE(last_name, "'""'"like "O'BRIEN";

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

1

2

3

UPDATE actors

SET last_name = REPLACE(last_name, "'""'")

WHERE last_name like "%'%";

结论

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

相关文章
相关标签/搜索