Como MySQL excluir linhas duplicadas

Como MySQL excluir linhas duplicadas
MySQL é um conjunto de dados relacional que armazena dados em tabelas que têm linhas e colunas. No entanto, os dados armazenados no banco de dados podem conter valores duplicados causados ​​por erros nos aplicativos ou usuários.

Neste tutorial, aprenderemos como remover linhas duplicadas em um banco de dados MySQL para reduzir o tamanho do banco de dados e ajudar a aumentar o desempenho do servidor.

Antes de continuarmos, estamos assumindo:

  1. Você tem o MySQL instalado e executando em seu sistema
  2. Você tem acesso raiz ao banco de dados.
  3. Você tem acesso a um banco de dados para experimentar ou testar

OBSERVAÇÃO: Se você precisar de um banco de dados de amostra para experimentar os conceitos fornecidos neste guia, considere o banco de dados Sakila ou faça o download de uma cópia do banco de dados usado neste guia.

Os recursos são fornecidos abaixo:

Uso básico

Antes de começarmos, criaremos intencionalmente uma tabela contendo valores duplicados para fins de teste. As consultas SQL para executar esta ação estão abaixo:

Usar mundo;
Soltar a tabela se existir usuários;
Criar usuários da tabela (ID int Primária Tecla não NULL Auto_increment, Nome de usuário VARCHAR (10) NÃO NULL, FULL_NAME VARCHAR (20), email Varchar (255) NÃO NULL);
Inserir em usuários (nome de usuário, full_name, e -mail) valores
("Virgem", "Claude M. Mori "," [email protected] "),
("Pulsa", "Tiffany G. Bailey "," [email protected] "),
("Rocket", "Christopher S. Payton "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("PWNC", "Faye H. Hartley "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("Rocket", "Christopher S. Payton "," [email protected] "),
("Artemis", "Wesley C. Dillard "," [email protected] ");

Sinta -se à vontade para modificar a consulta acima para atender às suas necessidades. Você também deve garantir que você tenha o banco de dados (mundo) criado para evitar erros.

Agora, se obtivermos todos os dados dentro da tabela e, em ordem, pelo nome de usuário, veremos as duplicatas que temos como mostrado:

MySQL> Use World;
Banco de dados alterado
mysql> selecione * do pedido de usuários por nome de usuário;
+----+------------+-----------------------+-----------------------+
| id | nome de usuário | Full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | DarkMatter | Patricia j. Raposa | [email protected] |
| 6 | DarkMatter | Patricia j. Raposa | [email protected] |
| 2 | pulsa | Tiffany G. Bailey | [email protected] |
| 5 | pwnnc | Faye h. Hartley | [email protected] |
| 3 | foguete | Christopher s. Payton | [email protected] |
| 7 | foguete | Christopher s. Payton | [email protected] |
| 1 | Virgem | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Como você pode ver na tabela acima, temos dois valores duplicados que aumentam o banco de dados sem motivo e causam velocidades lentas.

Vamos agora aprender como podemos remover esses valores.

#1 - Excluir junte

Uma maneira de remover linhas duplicadas em um banco de dados é usar a instrução MYSQL DELET. A consulta, no entanto, usa IDs para remover valores duplicados.

Por exemplo, para remover os valores duplicados na tabela de usuários acima, podemos inserir:

Exclua a tabela 1 dos usuários Tabela 1 INNER JUNIO.eu ia < table2.id AND table1.email = table2.email;

Depois de executar a consulta acima, você removerá os valores duplicados, como mostrado na saída abaixo:

mysql> Excluir tabela 1 dos usuários Tabela 1 ingressos internos Tabela de usuários onde Tabela1.eu ia < table2.id AND table1.email = table2.email;
Consulta ok, 2 linhas afetadas (0.01 seg)
mysql> selecione * do pedido de usuários por nome de usuário;
+----+------------+-----------------------+-----------------------+
| id | nome de usuário | Full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 6 | DarkMatter | Patricia j. Raposa | [email protected] |
| 2 | pulsa | Tiffany G. Bailey | [email protected] |
| 5 | pwnnc | Faye h. Hartley | [email protected] |
| 7 | foguete | Christopher s. Payton | [email protected] |
| 1 | Virgem | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - função row_number ()

O segundo método que podemos implementar é usar a função mysql row_number (). Esta função é suportada no MySQL versão 8 e superior.

Funciona atribuindo um valor int seqüencial a cada linha, com linhas contendo valores duplicados obtendo um valor maior que 1.

Para saber mais sobre essa função, use o recurso fornecido abaixo:

https: // dev.mysql.com/doc/refman/8.0/EN/Window-Function-Driptions.html#function_row-number

Considere a consulta abaixo que retorna o ID das linhas com valores duplicados:

Selecione ID em (selecione ID, row_number () sobre (Partição por nome de usuário Ordem por nome de usuário) como row_var dos usuários) T1 onde row_var> 1;

Depois de executar a consulta acima, você deve obter a lista de IDs, como mostrado na saída abaixo:

+----+
| id |
+----+
| 6 |
| 7 |
+----+
2 linhas no set (0.01 seg)

Se você deseja remover os valores, basta substituir a instrução Selecionar pela instrução Excluir, como mostrado abaixo:

Exclua dos usuários onde o ID entra (selecione ID (selecione ID, Row_Number () Over (Partição por Nome de usuário Ordem pelo nome de usuário) como row_var dos usuários) t1 onde row_var> 1);

Finalmente, você pode verificar se os valores duplicados são removidos usando a instrução SELECT.

mysql> selecione * do pedido de usuários por nome de usuário;
+----+------------+-----------------------+-----------------------+
| id | nome de usuário | Full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | DarkMatter | Patricia j. Raposa | [email protected] |
| 2 | pulsa | Tiffany G. Bailey | [email protected] |
| 5 | pwnnc | Faye h. Hartley | [email protected] |
| 3 | foguete | Christopher s. Payton | [email protected] |
| 1 | Virgem | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Conclusão

Neste tutorial, discutimos os dois métodos de remoção de valores duplicados de um banco de dados. Grandes bancos de dados, especialmente aqueles em uso comum, podem conter muitos valores duplicados de importações externas e outros erros. Portanto, é necessário continuar purgando valores duplicados para garantir que os aplicativos tenham desempenho ideal.