MySQL删除重复记录

17 Mar 2025 | 4 分钟阅读

MySQL是一个数据库应用程序,以行和列的形式将数据存储在表中。此数据库应用程序可以在表中存储重复记录,这会影响MySQL数据库的性能。然而,数据重复是由于各种原因造成的,在MySQL数据库工作中,从表中删除重复值是一项重要任务。

通常,最好始终在表上使用唯一约束来存储数据,以防止出现重复行。在本文中,我们将学习如何在MySQL数据库中删除重复记录

让我们通过一个例子来理解它。假设我们有一个名为“student_contacts”的表,其中包含许多重复记录。

MySQL Delete Duplicate Records

现在,我们将看到如何从表中删除重复记录。MySQL主要可以通过三种方式删除重复记录。

1. 使用DELETE JOIN删除重复记录

我们可以使用 MySQL中的DELETE JOIN语句,它允许我们快速删除重复记录。以下语句从表中删除重复行并保留最大的id。

此查询将student_contacts表引用了两次。因此,我们将使用表别名S1S2。执行语句后,我们将得到以下输出。

MySQL Delete Duplicate Records

上面的输出表明已从表中删除了五条记录。我们可以通过执行以下查询来验证这一点,该查询返回表中的重复记录。

它将返回如下输出,显示一个空集。这意味着重复记录已成功从表中删除。

MySQL Delete Duplicate Records

我们也可以使用 SELECT语句 来验证它。在下图中,我们可以看到表中没有重复记录。

MySQL Delete Duplicate Records

假设我们想删除重复记录并保留表中的最小id。在这种情况下,我们将使用如下语句。

需要注意的是,在执行查询之前,我们需要重新创建一个包含重复记录的表。执行语句后,我们将得到以下输出。

MySQL Delete Duplicate Records

我们也可以使用SELECT语句来验证它。在下图中,我们可以看到具有较高id的重复记录已被删除。

MySQL Delete Duplicate Records

2. 使用ROW_NUMBER()函数删除重复记录

ROW_NUMBER()函数返回分区内每行的顺序号,该顺序号从1开始到分区中的行数。

我们可以使用以下语句,该语句使用 ROW_NUMBER()函数 为每一行分配一个顺序号。如果此查询发现表中的name列重复,它将分配大于1的行号

执行后,我们将得到如下输出。

MySQL Delete Duplicate Records

如果您只想获取重复的id行,请使用以下语句。

此语句返回以下输出。

MySQL Delete Duplicate Records

现在,我们可以使用 DELETE语句WHERE子句 中的子查询student_contacts表中删除重复记录。请参阅下面的语句。

执行后,我们将看到如下所示的输出图像,其中我们可以看到该语句已从表中删除了五条记录。您可以使用SELECT语句验证是否已删除重复行。

MySQL Delete Duplicate Records

3. 使用中间表删除重复行

我们也可以使用中间表从表中删除重复记录。以下是借助中间表删除重复记录的要点。

1.创建一个新表,其结构与我们将用于删除重复记录的原始表相同。

2.将原始表的唯一(distinct)行插入新创建的表中。

3.删除原始表,并将新创建的表重命名为与原始表相同的名称。

让我们通过以下查询来理解上述步骤,这些查询使用中间表删除重复记录。

步骤 1

步骤 2

步骤 3

请参阅下图以了解上述步骤。

MySQL Delete Duplicate Records