MariaDB - Gestión de duplicados
MariaDB, como se discutió en lecciones anteriores, permite duplicar registros y tablas en algunas situaciones. Algunos de estos duplicados no son de hecho duplicados debido a distintos tipos de datos o objetos, o como resultado de una vida útil o almacenamiento únicos del objeto de operación. Estos duplicados tampoco suelen plantear problemas.
En algunas situaciones, los duplicados causan problemas y, a menudo, aparecen debido a acciones implícitas o la política indulgente de un comando MariaDB. Hay formas de controlar este problema, encontrar duplicados, eliminar duplicados y evitar la creación de duplicados.
Estrategias y herramientas
Hay cuatro formas clave de administrar duplicados:
Pesquelos con JOIN y elimínelos con una tabla temporal.
Utilice INSERT ... ON DUPLICATE KEY UPDATE para actualizar al descubrir un duplicado.
Utilice DISTINCT para eliminar los resultados de una instrucción SELECT y eliminar los duplicados.
Utilice INSERT IGNORE para detener la inserción de duplicados.
Uso de Unir con una tabla temporal
Simplemente realice una semi-unión como una unión interna y luego elimine los duplicados encontrados con una tabla temporal.
Usando INSERT
Cuando INSERT ... ON DUPLICATE KEY UPDATE descubre una clave única o principal duplicada, realiza una actualización. Al descubrir varias claves únicas, actualiza solo la primera. Por lo tanto, no lo use en tablas con múltiples índices únicos.
Revise el siguiente ejemplo, que revela lo que sucede en una tabla que contiene valores indexados al insertarlos en un campo poblado:
INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Note - Si no encuentra ninguna clave, una instrucción INSERT ... ON DUPLICATE KEY UPDATE se ejecuta como una instrucción de inserción normal.
Usando DISTINCT
Las cláusulas DISTINCT eliminan los duplicados de los resultados. La sintaxis general de una cláusula DISTINCT es la siguiente:
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note - Los resultados de una declaración con una cláusula DISTINCT -
Cuando se usa una expresión, devuelve valores únicos para ella.
Cuando usa múltiples expresiones, devuelve combinaciones únicas.
No ignora los valores NULL; por lo tanto, los resultados también contienen NULL como valores únicos.
Revise la siguiente declaración usando una cláusula DISTINCT para una sola expresión:
SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';
Revise el siguiente ejemplo usando múltiples expresiones:
SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30
Usando INSERT IGNORE
Una instrucción INSERT IGNORE le indica a MariaDB que cancele la inserción al descubrir un registro duplicado. Revise un ejemplo de su uso que se da a continuación:
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
Además, tenga en cuenta la lógica detrás de los duplicados. Algunas tablas requieren duplicados según la naturaleza de los datos de esa tabla. Adapte esa necesidad a su estrategia de gestión de registros duplicados.