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:
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;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;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;#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:
+----+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;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.