MariaDB - Gerenciando Duplicados
MariaDB, conforme discutido nas lições anteriores, permite registros e tabelas duplicados em algumas situações. Algumas dessas duplicatas não são, de fato, duplicatas devido a dados ou tipos de objetos distintos, ou como resultado de uma vida útil exclusiva ou armazenamento do objeto de operação. Essas duplicatas também normalmente não apresentam problemas.
Em algumas situações, as duplicatas podem causar problemas e muitas vezes aparecem devido a ações implícitas ou à política leniente de um comando MariaDB. Existem maneiras de controlar esse problema, localizar duplicatas, excluir duplicatas e evitar a criação de duplicatas.
Estratégias e Ferramentas
Existem quatro maneiras principais de gerenciar duplicatas -
Pesque-os com JOIN e exclua-os com uma tabela temporária.
Use INSERT ... ON DUPLICATE KEY UPDATE para atualizar na descoberta de uma duplicata.
Use DISTINCT para remover os resultados de uma instrução SELECT e remover duplicatas.
Use INSERT IGNORE para interromper a inserção de duplicatas.
Usando Join com uma Tabela Temporária
Simplesmente execute uma semi-junção como uma junção interna e, em seguida, remova as duplicatas encontradas com uma tabela temporária.
Usando INSERT
Quando INSERT ... ON DUPLICATE KEY UPDATE descobre uma chave única ou primária duplicada, ele executa uma atualização. Ao descobrir várias chaves exclusivas, ele atualiza apenas a primeira. Portanto, não o use em tabelas com vários índices exclusivos.
Revise o exemplo a seguir, que revela o que acontece em uma tabela que contém valores indexados na inserção em um campo preenchido -
INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Note - Se não encontrar nenhuma chave, uma instrução INSERT ... ON DUPLICATE KEY UPDATE é executada como uma instrução de inserção normal.
Usando DISTINCT
As cláusulas DISTINCT removem duplicatas dos resultados. A sintaxe geral para uma cláusula DISTINCT é a seguinte -
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note - Os resultados de uma declaração com uma cláusula DISTINCT -
Ao usar uma expressão, ele retorna valores exclusivos para ela.
Ao usar várias expressões, ele retorna combinações exclusivas.
Ele não ignora os valores NULL; portanto, os resultados também contêm NULLs como valores exclusivos.
Revise a instrução a seguir usando uma cláusula DISTINCT para uma única expressão -
SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';
Revise o exemplo a seguir usando várias expressões -
SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30
Usando INSERT IGNORE
Uma instrução INSERT IGNORE instrui MariaDB a cancelar a inserção na descoberta de um registro duplicado. Reveja um exemplo de seu uso fornecido abaixo -
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
Além disso, observe a lógica por trás das duplicatas. Algumas tabelas requerem duplicatas com base na natureza dos dados da tabela. Acomode essa necessidade em sua estratégia de gerenciamento de registros duplicados.