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.