Cómo MySQL elimina las filas duplicadas

Cómo MySQL elimina las filas duplicadas
MySQL es un conjunto de datos relacional 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 usuarios.

En este tutorial, aprenderemos cómo eliminar las 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. Tienes mysql instalado y ejecutado en su sistema
  2. Tiene acceso raíz a la base de datos.
  3. Tiene 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 contenga valores duplicados para fines de prueba. Las consultas SQL para realizar esta acción están a continuación:

Usar el mundo;
Tabla de caída si existe usuarios;
Crear usuarios de la tabla (ID int primario clave no nulo auto_incement, username varchar (10) no null, full_name varchar (20), correo electrónico varchar (255) no nulo);
Insertar en valores de usuarios (nombre de usuario, full_name, correo electrónico)
("Virgo", "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] "),
("Artemisa", "Wesley C. Dillard "," [email protected] ");

Siéntase libre de modificar la consulta anterior para satisfacer sus necesidades. También debe asegurarse de tener la base de datos (mundo) creada para evitar errores.

Ahora, si tenemos 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 cambiada
MySQL> SELECT * Del orden de los usuarios por nombre de usuario;
+----+------------+-----------------------+-----------------------+
| ID | nombre de usuario | Full_name | correo electrónico |
+----+------------+-----------------------+-----------------------+
| 8 | Artemisa | Wesley C. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Zorro | [email protected] |
| 6 | Darkmatter | Patricia J. Zorro | [email protected] |
| 2 | PULSA | Tiffany G. Bailey | [email protected] |
| 5 | PWNC | Faye H. Hartley | [email protected] |
| 3 | cohete | Christopher S. Payton | [email protected] |
| 7 | cohete | Christopher S. Payton | [email protected] |
| 1 | Virgo | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

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

Aprendamos ahora cómo podemos eliminar estos valores.

#1 - Eliminar unirse

Una forma de eliminar las filas duplicadas en una base de datos es usar la instrucción MySQL Eliminar Join. La consulta, sin embargo, usa IDS para eliminar los valores duplicados.

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

Eliminar la Tabla1 de los usuarios Tabla1 Unión interna Tabla 2 donde la Tabla1.identificación < table2.id AND table1.email = table2.email;

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

MySQL> Eliminar la tabla1 de los usuarios Tabla1 Unión interna Tabla 2 donde la Tabla1.identificación < table2.id AND table1.email = table2.email;
Consulta bien, 2 filas afectadas (0.01 seg)
MySQL> SELECT * Del orden de los usuarios por nombre de usuario;
+----+------------+-----------------------+-----------------------+
| ID | nombre de usuario | Full_name | correo electrónico |
+----+------------+-----------------------+-----------------------+
| 8 | Artemisa | Wesley C. Dillard | [email protected] |
| 6 | Darkmatter | Patricia J. Zorro | [email protected] |
| 2 | PULSA | Tiffany G. Bailey | [email protected] |
| 5 | PWNC | Faye H. Hartley | [email protected] |
| 7 | cohete | Christopher S. Payton | [email protected] |
| 1 | Virgo | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - función row_number ()

El segundo método que podemos implementar es usar la función mysql row_number (). Esta función es compatible en MySQL versión 8 y superior.

Funciona al asignar un valor INT secuencial a cada fila, con filas que contienen valores duplicados obteniendo un valor superior a 1.

Para obtener más información sobre esta función, use el recurso proporcionado 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 la ID de las filas con valores duplicados:

Seleccione ID de (Seleccione ID, Row_Number () Over (Partition by UserName Order por nombre de usuario) como ROW_VAR de los usuarios) T1 Where Row_var> 1;

Una vez que ejecute la consulta anterior, debe obtener la lista de ID como se muestra en la salida a continuación:

+----+
| ID |
+----+
| 6 |
| 7 |
+----+
2 filas en el set (0.01 seg)

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

Eliminar de los usuarios donde ID en (seleccione ID de (Seleccione ID, Row_Number () Over (Partition by UserName Order by Username) como Row_var de los usuarios) T1 Where Row_var> 1);

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

MySQL> SELECT * Del orden de los usuarios por nombre de usuario;
+----+------------+-----------------------+-----------------------+
| ID | nombre de usuario | Full_name | correo electrónico |
+----+------------+-----------------------+-----------------------+
| 8 | Artemisa | Wesley C. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Zorro | [email protected] |
| 2 | PULSA | Tiffany G. Bailey | [email protected] |
| 5 | PWNC | Faye H. Hartley | [email protected] |
| 3 | cohete | Christopher S. Payton | [email protected] |
| 1 | Virgo | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Conclusión

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