Hvordan mysql sletter dupliserte rader

Hvordan mysql sletter dupliserte rader
MySQL er et relasjonelt datasett som lagrer data i tabeller som har rader og kolonner. Imidlertid kan dataene som er lagret i databasen inneholde duplikatverdier forårsaket av feil i applikasjonene eller brukerne.

I denne opplæringen skal vi lære å fjerne dupliserte rader i en MySQL -database for å redusere databasestørrelsen og bidra til å øke serverens ytelse.

Før vi fortsetter, antar vi:

  1. Du har MySQL installert og kjører på systemet ditt
  2. Du har rottilgang til databasen.
  3. Du har tilgang til en database for eksperimentering eller testing

MERK: Hvis du trenger en eksempeldatabase for å prøve ut konseptene som er gitt i denne guiden, kan du vurdere Sakila -databasen eller last ned en kopi av databasen som brukes i denne guiden.

Ressurser er gitt nedenfor:

Grunnleggende bruk

Før vi begynner, vil vi med vilje lage en tabell som inneholder dupliserte verdier for testformål. SQL -spørsmålene om å utføre denne handlingen er nedenfor:

Bruk verden;
Drop -tabellen hvis det finnes brukere;
Lag tabellbrukere (ID INT Primærnøkkel Ikke null Auto_Increment, brukernavn varchar (10) ikke null, full_name varchar (20), e -post varchar (255) ikke null);
Sett inn brukere (brukernavn, full_navn, e -post) verdier
("Jomfru", "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] ");

Endre gjerne spørringen ovenfor for å passe dine behov. Du bør også sørge for at du er opprettet databasen (verden) for å unngå feil.

Hvis vi får alle dataene i tabellen og i orden av brukernavn, vil vi se duplikatene vi har som vist:

mysql> bruk verden;
Databasen endret
MySQL> Velg * fra brukerbestillinger etter brukernavn;
+----+------------+-----------------------+-----------------------+
| id | Brukernavn | full_name | E -post |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Rev | [email protected] |
| 6 | Darkmatter | Patricia J. Rev | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 3 | Rakett | Christopher s. Payton | [email protected] |
| 7 | Rakett | Christopher s. Payton | [email protected] |
| 1 | Jomfru | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Som du ser fra tabellen over, har vi to duplikatverdier som gjør databasen større uten grunn og forårsaker langsomme hastigheter.

La oss nå lære hvordan vi kan fjerne disse verdiene.

#1 - Slett Bli med

En måte å fjerne dupliserte rader i en database på er å bruke MySQL -sletting -uttalelsen. Spørringen bruker imidlertid ID -er for å fjerne duplikatverdier.

For å fjerne duplikatverdiene i brukertabellen ovenfor, kan vi for eksempel legge inn:

Slett tabell1 fra brukere Tabell1 indre sammenføyning Bruker Tabell2 Hvor tabell1.id < table2.id AND table1.email = table2.email;

Når du har utført spørringen ovenfor, fjerner du duplikatverdiene som vist i utgangen nedenfor:

mysql> slett tabell1 fra brukere tabell1 indre sammenføyningsbrukere tabell2 der tabell1.id < table2.id AND table1.email = table2.email;
Spørring OK, 2 rader berørt (0.01 sek)
MySQL> Velg * fra brukerbestillinger etter brukernavn;
+----+------------+-----------------------+-----------------------+
| id | Brukernavn | full_name | E -post |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 6 | Darkmatter | Patricia J. Rev | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 7 | Rakett | Christopher s. Payton | [email protected] |
| 1 | Jomfru | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - ROW_NUMBER () -funksjonen

Den andre metoden vi kan implementere er å bruke mysql row_number () -funksjonen. Denne funksjonen støttes i MySQL versjon 8 og høyere.

Det fungerer ved å tilordne en sekvensiell int -verdi til hver rad, med rader som inneholder duplikatverdier som får en verdi høyere enn 1.

For å lære mer om denne funksjonen, bruk ressursen som er gitt nedenfor:

https: // dev.mysql.com/doc/refman/8.0/EN/vindusfunksjonsbeskrivelser.html#funksjon_row-nummer

Tenk på spørringen nedenfor som returnerer IDen til radene med dupliserte verdier:

Velg ID fra (Velg ID, ROW_NUMBER () Over (Partisjon etter brukernavnsordre etter brukernavn) som ROW_VAR fra brukere) T1 der ROW_VAR> 1;

Når du har utført spørringen ovenfor, bør du få listen over ID -er som vist i utdataene nedenfor:

+----+
| id |
+----+
| 6 |
| 7 |
+----+
2 rader i settet (0.01 sek)

Hvis du vil fjerne verdiene, kan du bare erstatte SELECT -setningen med Delete -setningen som vist nedenfor:

Slett fra brukere der ID inn (velg ID fra (velg id, row_number () over (partisjon etter brukernavn ordre etter brukernavn) som row_var fra brukere) t1 der row_var> 1);

Til slutt kan du bekrefte at duplikatverdiene blir fjernet ved hjelp av SELECT -setningen.

MySQL> Velg * fra brukerbestillinger etter brukernavn;
+----+------------+-----------------------+-----------------------+
| id | Brukernavn | full_name | E -post |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia J. Rev | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 3 | Rakett | Christopher s. Payton | [email protected] |
| 1 | Jomfru | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Konklusjon

I denne opplæringen diskuterte vi de to metodene for å fjerne dupliserte verdier fra en database. Store databaser, spesielt de som er til vanlig bruk, kan inneholde mange duplikatverdier fra ekstern import og andre feil. Derfor er det behov for å fortsette å rense duplikatverdier for å sikre at applikasjoner fungerer optimalt.