Come mysql elimina le righe duplicate

Come mysql elimina le righe duplicate
MySQL è un set di dati relazionale che memorizza i dati in tabelle con righe e colonne. Tuttavia, i dati archiviati nel database possono contenere valori duplicati causati da errori nelle applicazioni o negli utenti.

In questo tutorial, impareremo come rimuovere le righe duplicate in un database MySQL per ridurre le dimensioni del database e aiutare ad aumentare le prestazioni del server.

Prima di continuare, assumiamo:

  1. Hai mysql installato e in esecuzione sul tuo sistema
  2. Hai accesso al root al database.
  3. Hai accesso a un database per sperimentare o testare

NOTA: Se hai bisogno di un database di esempio per provare i concetti forniti in questa guida, si prega di considerare il database Sakila o scaricare una copia del database utilizzato in questa guida.

Le risorse sono fornite di seguito:

Uso di base

Prima di iniziare, creeremo intenzionalmente una tabella contenente valori duplicati ai fini del test. Le query SQL per eseguire questa azione sono di seguito:

Usare il mondo;
Drop tabella se esistono utenti;
Crea utenti di tabella (ID ID INT PRIMARY Key non null Auto_InCrement, Username Varchar (10) non null, full_name varchar (20), e -mail varchar (255) non null);
Inserisci i valori degli utenti (nome utente, full_name, email)
("Virgo", "Claude M. Mori "," [email protected] "),
("Pulsa", "Tiffany G. Bailey "," [email protected] "),
("Rocket", "Christopher S. Payton "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("PWNC", "Faye H. Hartley "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("Rocket", "Christopher S. Payton "," [email protected] "),
("Artemis", "Wesley C. Dillard "," [email protected] ");

Sentiti libero di modificare la query sopra per soddisfare le tue esigenze. Dovresti anche assicurarti di creare il database (mondo) per evitare errori.

Ora, se otteniamo tutti i dati all'interno della tabella e in ordine per nome utente, vedremo i duplicati che abbiamo mostrato:

mysql> usa il mondo;
Database modificato
mysql> seleziona * dall'ordine degli utenti per nome utente;
+----+------------+-----------------------+-----------------------+
| id | Nome utente | full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Volpe | [email protected] |
| 6 | Darkmatter | Patricia J. Volpe | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | PWNC | Faye h. Hartley | [email protected] |
| 3 | Rocket | Christopher s. Payton | [email protected] |
| 7 | Rocket | Christopher s. Payton | [email protected] |
| 1 | Vergine | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Come puoi vedere dalla tabella sopra, abbiamo due valori duplicati che rendono il database più grande senza motivo e causano velocità lente.

Impariamo ora come possiamo rimuovere questi valori.

#1 - Elimina

Un modo per rimuovere le righe duplicate in un database è utilizzare l'istruzione MySQL Elimina. La query, tuttavia, utilizza ID per rimuovere i valori duplicati.

Ad esempio, per rimuovere i valori duplicati nella tabella degli utenti sopra, possiamo inserire:

Elimina Tabella 1 dalla Tabella 1 della Tabella Inner Utenti Tabella 2 dove Tabella1.id < table2.id AND table1.email = table2.email;

Una volta eseguita la query sopra, rimuoverai i valori duplicati come mostrato nell'output di seguito:

MySQL> Elimina Tabella1 dalla Tabella 1 Tabella interna della Tabella 2 dove Tabella 1.id < table2.id AND table1.email = table2.email;
Query ok, 2 righe interessate (0.01 sec)
mysql> seleziona * dall'ordine degli utenti per nome utente;
+----+------------+-----------------------+-----------------------+
| id | Nome utente | full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 6 | Darkmatter | Patricia J. Volpe | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | PWNC | Faye h. Hartley | [email protected] |
| 7 | Rocket | Christopher s. Payton | [email protected] |
| 1 | Vergine | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - row_number () funzione

Il secondo metodo che possiamo implementare è usare la funzione mysql row_number (). Questa funzione è supportata nella versione 8 di MySQL e superiore.

Funziona assegnando un valore INT sequenziale a ciascuna riga, con righe contenenti valori duplicati che ottengono un valore superiore a 1.

Per saperne di più su questa funzione, utilizzare la risorsa fornita di seguito:

https: // dev.mysql.com/doc/refman/8.0/en/finestra-funzione-descrizioni.html#function_row-number

Considera la query seguente che restituisce l'ID delle righe con valori duplicati:

Seleziona ID da (selezionare ID, row_number () sopra (partizione per nome utente per nome utente) come row_var dagli utenti) T1 dove row_var> 1;

Una volta eseguita la query sopra, è necessario ottenere l'elenco degli ID come mostrato nell'output di seguito:

+----+
| id |
+----+
| 6 |
| 7 |
+----+
2 righe in set (0.01 sec)

Se si desidera rimuovere i valori, sostituire semplicemente l'istruzione Seleziona con l'istruzione ELETE come mostrato di seguito:

Elimina dagli utenti in cui ID in (Seleziona ID da (selezionare ID, row_number () sopra (partizione per nome utente per nome utente) come row_var dagli utenti) T1 dove row_var> 1);

Infine, è possibile verificare che i valori duplicati vengano rimossi utilizzando l'istruzione SELECT.

mysql> seleziona * dall'ordine degli utenti per nome utente;
+----+------------+-----------------------+-----------------------+
| id | Nome utente | full_name | Email |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Volpe | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | PWNC | Faye h. Hartley | [email protected] |
| 3 | Rocket | Christopher s. Payton | [email protected] |
| 1 | Vergine | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Conclusione

In questo tutorial, abbiamo discusso dei due metodi per rimuovere i valori duplicati da un database. I database di grandi dimensioni, in particolare quelli di uso comune, possono contenere molti valori duplicati da importazioni esterne e altri errori. Pertanto, è necessario continuare a eliminare i valori duplicati per garantire che le applicazioni funzionino in modo ottimale.