Cómo MySQL elimina filas duplicadas

How Mysql Delete Duplicate Rows



MySQL es un conjunto de datos relacionales que almacena datos en tablas que tienen filas y columnas. Sin embargo, los datos almacenados en la base de datos pueden contener valores duplicados causados ​​por errores en las aplicaciones o los usuarios.

En este tutorial, aprenderemos cómo eliminar filas duplicadas en una base de datos MySQL para reducir el tamaño de la base de datos y ayudar a aumentar el rendimiento del servidor.







Antes de continuar, asumimos:



  1. Tiene MySQL instalado y ejecutándose en su sistema
  2. Tiene acceso de root a la base de datos.
  3. Tienes acceso a una base de datos para experimentar o probar

NOTA : Si necesita una base de datos de muestra para probar los conceptos proporcionados en esta guía, considere la base de datos de Sakila o descargue una copia de la base de datos utilizada en esta guía.



Los recursos se proporcionan a continuación:





Uso básico

Antes de comenzar, crearemos intencionalmente una tabla que contiene valores duplicados con fines de prueba. Las consultas SQL para realizar esta acción son las siguientes:

USAR mundo;
SOLTAR MESA SI EXISTE usuarios;
CREAR MESA usuarios(identificación EN T CLAVE PRIMARIA NO NULO AUTOINCREMENTO ,nombre de usuario VARCHAR (10) NO NULO ,nombre completo VARCHAR (20),Email VARCHAR (255) NO NULO );
INSERTAR DENTRO usuarios(nombre de usuario,nombre completo,Email) VALORES
('virgo', 'Claude M. Mori', '[correo electrónico protegido]'),
('pulsa', 'Tiffany G. Bailey', '[correo electrónico protegido]'),
('cohete', 'Christopher S. Payton', '[correo electrónico protegido]'),
('materia oscura', Patricia J. Fox, '[correo electrónico protegido]'),
('tema', 'Faye H. Hartley', '[correo electrónico protegido]'),
('materia oscura', Patricia J. Fox, '[correo electrónico protegido]'),
('cohete', 'Christopher S. Payton', '[correo electrónico protegido]'),
('artemis', 'Wesley C. Dillard', '[correo electrónico protegido]');

No dude en modificar la consulta anterior para adaptarla a sus necesidades. También debe asegurarse de tener la base de datos (mundo) creada para evitar errores.



Ahora, si obtenemos todos los datos dentro de la tabla y en orden por nombre de usuario, veremos los duplicados que tenemos como se muestra:

mysql> usar mundo;
Base de datos cambió
mysql> SELECCIONE * DE usuarios ORDENAR POR nombre de usuario;
+----+------------+-----------------------+-----------------------+
|identificación|nombre de usuario|nombre completo|Email|
+----+------------+-----------------------+-----------------------+
| 8 |artemisa|Wesley C. Dillard|[correo electrónico protegido]|
| 4 |materia oscura|Patricia J. Fox|[correo electrónico protegido]|
| 6 |materia oscura|Patricia J. Fox|[correo electrónico protegido]|
| 2 |pulsa|Tiffany G. Bailey|[correo electrónico protegido]|
| 5 |tema|Faye H. Hartley|[correo electrónico protegido]|
| 3 |cohete|Christopher S. Payton|[correo electrónico protegido]|
| 7 |cohete|Christopher S. Payton|[correo electrónico protegido]|
| 1 |virgo|Claude M. Mori|[correo electrónico protegido]|
+----+------------+-----------------------+-----------------------+

Como puede ver en la tabla anterior, tenemos dos valores duplicados que hacen que la base de datos sea más grande sin ningún motivo y provocan velocidades lentas.

Aprendamos ahora cómo podemos eliminar estos valores.

# 1 - BORRAR UNIRSE

Una forma de eliminar filas duplicadas en una base de datos es usar la instrucción DELETE JOIN de MySQL. Sin embargo, la consulta usa identificadores para eliminar valores duplicados.

Por ejemplo, para eliminar los valores duplicados en la tabla de usuarios anterior, podemos ingresar:

ELIMINAR tabla 1 DE tabla de usuarios1 INTERNO ENTRAR tabla de usuarios 2 DÓNDE table1.id<table2.id Y table1.email=table2.email;

Una vez que ejecute la consulta anterior, eliminará los valores duplicados como se muestra en el resultado a continuación:

mysql> ELIMINAR tabla 1 DE tabla de usuarios1 INTERNO ENTRAR tabla de usuarios 2 DÓNDE table1.id<table2.id Y table1.email=table2.email;
Consulta OK, 2filas afectadas(0.01segundo)

mysql> SELECCIONE * DE usuarios ORDENAR POR nombre de usuario;
+----+------------+-----------------------+-----------------------+
|identificación|nombre de usuario|nombre completo|Email|
+----+------------+-----------------------+-----------------------+
| 8 |artemisa|Wesley C. Dillard|[correo electrónico protegido]|
| 6 |materia oscura|Patricia J. Fox|[correo electrónico protegido]|
| 2 |pulsa|Tiffany G. Bailey|[correo electrónico protegido]|
| 5 |tema|Faye H. Hartley|[correo electrónico protegido]|
| 7 |cohete|Christopher S. Payton|[correo electrónico protegido]|
| 1 |virgo|Claude M. Mori|[correo electrónico protegido]|
+----+------------+-----------------------+-----------------------+

# 2 - Función Row_Number ()

El segundo método que podemos implementar es usar la función número_fila () de MySQL. Esta función es compatible con MySQL versión 8 y superior.

Funciona asignando un valor int secuencial a cada fila, y las filas que contienen valores duplicados obtienen un valor superior a 1.

Para obtener más información sobre esta función, utilice el recurso que se proporciona a continuación:

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

Considere la consulta a continuación que devuelve el ID de las filas con valores duplicados:

SELECCIONE identificación DE ( SELECCIONE identificación,NUMERO DE FILA()SOBRE( DIVIDIR POR nombre de usuario ORDENAR POR nombre de usuario) COMO row_var DE usuarios)t1 DÓNDE row_var> 1;

Una vez que ejecute la consulta anterior, debería obtener la lista de identificadores como se muestra en el resultado a continuación:

+----+
|identificación|
+----+
| 6 |
| 7 |
+----+
2filas en colocar (0.01segundo)

Si desea eliminar los valores, simplemente reemplace la instrucción SELECT con la instrucción DELETE como se muestra a continuación:

ELIMINAR DE usuarios DÓNDE identificación EN ( SELECCIONE identificación DE ( SELECCIONE identificación,NUMERO DE FILA()SOBRE( DIVIDIR POR nombre de usuario ORDENAR POR nombre de usuario) COMO row_var DE usuarios)t1 DÓNDE row_var> 1);

Finalmente, puede verificar que los valores duplicados se eliminen utilizando la instrucción SELECT.

mysql> SELECCIONE * de usuarios ORDENAR POR nombre de usuario;
+----+------------+-----------------------+-----------------------+
|identificación|nombre de usuario|nombre completo|Email|
+----+------------+-----------------------+-----------------------+
| 8 |artemisa|Wesley C. Dillard|[correo electrónico protegido]|
| 4 |materia oscura|Patricia J. Fox|[correo electrónico protegido]|
| 2 |pulsa|Tiffany G. Bailey|[correo electrónico protegido]|
| 5 |tema|Faye H. Hartley|[correo electrónico protegido]|
| 3 |cohete|Christopher S. Payton|[correo electrónico protegido]|
| 1 |virgo|Claude M. Mori|[correo electrónico protegido]|
+----+------------+-----------------------+-----------------------+

Conclusión

En este tutorial, discutimos los dos métodos para eliminar valores duplicados de una base de datos. Las bases de datos grandes, especialmente las de uso común, pueden contener muchos valores duplicados de importaciones externas y otros errores. Por lo tanto, es necesario seguir depurando los valores duplicados para garantizar que las aplicaciones funcionen de manera óptima.