MariaDB - Gestione dei duplicati
MariaDB, come discusso nelle lezioni precedenti, consente la duplicazione di record e tabelle in alcune situazioni. Alcuni di questi duplicati non sono in effetti duplicati a causa di dati o tipi di oggetti distinti o come risultato della durata o della memorizzazione univoca dell'oggetto operazione. Inoltre, questi duplicati in genere non presentano problemi.
In alcune situazioni, i duplicati causano problemi e spesso appaiono a causa di azioni implicite o della politica indulgente di un comando MariaDB. Esistono modi per controllare questo problema, trovare duplicati, eliminare duplicati e impedire la creazione di duplicati.
Strategie e strumenti
Esistono quattro modi principali per gestire i duplicati:
Pescali con JOIN e cancellali con una tabella temporanea.
Utilizzare INSERT ... ON DUPLICATE KEY UPDATE per aggiornare alla scoperta di un duplicato.
Utilizzare DISTINCT per eliminare i risultati di un'istruzione SELECT e rimuovere i duplicati.
Utilizzare INSERISCI IGNORA per interrompere l'inserimento dei duplicati.
Utilizzo di Join with a Temporary Table
Esegui semplicemente un semi join come un inner join, quindi rimuovi i duplicati trovati con una tabella temporanea.
Utilizzando INSERT
Quando INSERT ... ON DUPLICATE KEY UPDATE rileva una chiave univoca o primaria duplicata, esegue un aggiornamento. Alla scoperta di più chiavi univoche, aggiorna solo la prima. Quindi, non utilizzarlo su tabelle con più indici univoci.
Esamina il seguente esempio, che rivela cosa accade in una tabella contenente valori indicizzati all'inserimento in un campo popolato:
INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Note - Se non trova alcuna chiave, un'istruzione INSERT ... ON DUPLICATE KEY UPDATE viene eseguita come una normale istruzione insert.
Utilizzando DISTINCT
Le clausole DISTINCT rimuovono i duplicati dai risultati. La sintassi generale per una clausola DISTINCT è la seguente:
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note - I risultati di un'istruzione con una clausola DISTINCT -
Quando si utilizza un'espressione, restituisce valori univoci per essa.
Quando si utilizzano più espressioni, restituisce combinazioni uniche.
Non ignora i valori NULL; pertanto, i risultati contengono anche NULL come valori univoci.
Rivedi la seguente dichiarazione utilizzando una clausola DISTINCT per una singola espressione:
SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';
Rivedi il seguente esempio utilizzando più espressioni:
SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30
Utilizzo di INSERT IGNORE
Un'istruzione INSERT IGNORE ordina a MariaDB di annullare l'inserimento alla scoperta di un record duplicato. Rivedi un esempio del suo utilizzo fornito di seguito:
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
Inoltre, nota la logica dietro i duplicati. Alcune tabelle richiedono duplicati in base alla natura dei dati della tabella. Soddisfa tale esigenza nella tua strategia per la gestione dei record duplicati.