MariaDB - Zarządzanie duplikatami

MariaDB, jak omówiono we wcześniejszych lekcjach, umożliwia w niektórych sytuacjach zduplikowane rekordy i tabele. Niektóre z tych duplikatów nie są w rzeczywistości duplikatami z powodu różnych typów danych lub obiektów lub w wyniku unikalnej długości życia lub przechowywania obiektu operacji. Te duplikaty również zazwyczaj nie stanowią problemu.

W niektórych sytuacjach duplikaty powodują problemy i często pojawiają się z powodu niejawnych działań lub łagodnej polityki polecenia MariaDB. Istnieją sposoby kontrolowania tego problemu, znajdowania duplikatów, usuwania duplikatów i zapobiegania tworzeniu duplikatów.

Strategie i narzędzia

Istnieją cztery kluczowe sposoby zarządzania duplikatami -

  • Wyławiaj je za pomocą JOIN i usuwaj je za pomocą tymczasowej tabeli.

  • Użyj INSERT ... ON DUPLICATE KEY UPDATE, aby zaktualizować po wykryciu duplikatu.

  • Użyj DISTINCT, aby usunąć wyniki instrukcji SELECT i usunąć duplikaty.

  • Użyj INSERT IGNORE, aby zatrzymać wstawianie duplikatów.

Korzystanie z łączenia z tabelą tymczasową

Po prostu wykonaj sprzężenie połowiczne, takie jak sprzężenie wewnętrzne, a następnie usuń duplikaty znalezione w tabeli tymczasowej.

Korzystanie z INSERT

Gdy INSERT ... ON DUPLICATE KEY UPDATE wykryje zduplikowany klucz unikalny lub podstawowy, przeprowadza aktualizację. Po wykryciu wielu unikalnych kluczy aktualizuje tylko pierwszy. Dlatego nie używaj go w tabelach z wieloma unikalnymi indeksami.

Przejrzyj poniższy przykład, który pokazuje, co dzieje się w tabeli zawierającej indeksowane wartości po wstawieniu do wypełnionego pola -

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - Jeśli nie znajdzie klucza, instrukcja INSERT ... ON DUPLICATE KEY UPDATE jest wykonywana jak zwykła instrukcja insert.

Korzystanie z DISTINCT

Klauzule DISTINCT usuwają duplikaty z wyników. Ogólna składnia klauzuli DISTINCT jest następująca -

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Wyniki instrukcji z klauzulą ​​DISTINCT -

  • Używając jednego wyrażenia, zwraca dla niego unikalne wartości.

  • W przypadku używania wielu wyrażeń zwraca unikalne kombinacje.

  • Nie ignoruje wartości NULL; w związku z tym wyniki zawierają również wartości NULL jako unikalne wartości.

Przejrzyj następującą instrukcję, używając klauzuli DISTINCT dla pojedynczego wyrażenia -

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Przejrzyj poniższy przykład z użyciem wielu wyrażeń -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Używanie INSERT IGNORE

Instrukcja INSERT IGNORE instruuje MariaDB, aby anulowała wstawianie po wykryciu zduplikowanego rekordu. Przejrzyj przykład jego zastosowania podany poniżej -

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

Zwróć także uwagę na logikę stojącą za duplikatami. Niektóre tabele wymagają duplikatów ze względu na charakter danych w tej tabeli. Uwzględnij tę potrzebę w swojej strategii zarządzania zduplikowanymi rekordami.