Kuinka MySQL poistaa päällekkäiset rivit

How Mysql Delete Duplicate Rows

MySQL on relaatiotietojoukko, joka tallentaa tiedot taulukoihin, joissa on rivejä ja sarakkeita. Tietokantaan tallennetut tiedot voivat kuitenkin sisältää päällekkäisiä arvoja, jotka johtuvat sovellusten tai käyttäjien virheistä.

Tässä opetusohjelmassa opimme poistamaan päällekkäiset rivit MySQL -tietokannasta tietokannan koon pienentämiseksi ja palvelimen suorituskyvyn parantamiseksi.



Ennen kuin jatkamme, oletamme:



  1. Sinulla on MySQL asennettuna ja käynnissä järjestelmässäsi
  2. Sinulla on pääsy tietokantaan.
  3. Sinulla on pääsy tietokantaan kokeilua tai testausta varten

HUOMAUTUS : Jos tarvitset esimerkkitietokannan kokeillaksesi tämän oppaan käsitteitä, harkitse Sakila -tietokantaa tai lataa kopio tässä oppaassa käytetystä tietokannasta.



Resurssit ovat alla:

Peruskäyttö

Ennen kuin aloitamme, luomme tarkoituksellisesti taulukon, joka sisältää päällekkäisiä arvoja testausta varten. SQL -kyselyt tämän toiminnon suorittamiseksi ovat alla:

KÄYTTÄÄ maailman-;
PUDOTA PÖYTÄ JOS OLEMASSA käyttäjille;
LUODA PÖYTÄ käyttäjille(id INT PÄÄAVAIN EI TYHJÄ AUTO_INCREMENT ,käyttäjätunnus VARCHAR (10) EI TYHJÄ ,koko nimi VARCHAR (kaksikymmentä),sähköposti VARCHAR (255) EI TYHJÄ );
INSERT INTO käyttäjille(käyttäjätunnus,koko nimi,sähköposti) ARVOT
('Neitsyt', 'Claude M.Mori', '[email protected]'),
('Lehdistö', Tiffany G.Bailey, '[email protected]'),
('raketti', 'Christopher S.Payton', '[email protected]'),
('pimeä aine', 'Patricia J.Fox', '[email protected]'),
('aihe', Faye H.Hartley, '[email protected]'),
('pimeä aine', 'Patricia J.Fox', '[email protected]'),
('raketti', 'Christopher S.Payton', '[email protected]'),
('artemis', Wesley C.Dillard, '[email protected]');

Voit vapaasti muokata yllä olevaa kyselyä tarpeidesi mukaan. Varmista myös, että tietokanta (maailma) on luotu virheiden välttämiseksi.



Jos nyt saamme kaikki tiedot taulukon sisälle ja järjestyksessä käyttäjätunnuksen mukaan, näemme kaksoiskappaleet, jotka on esitetty:

mysql> käyttää maailman-;
Tietokanta muuttunut
mysql> VALITSE * ALK käyttäjille TILAA käyttäjätunnus;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|käyttäjätunnus|koko nimi|sähköposti|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |artemis|Wesley C.Dillard|[sähköposti suojattu]|
| 4 |pimeä aine|Patricia J.Fox|[sähköposti suojattu]|
| 6 |pimeä aine|Patricia J.Fox|[sähköposti suojattu]|
| 2 |Lehdistö|Tiffany G.Bailey|[sähköposti suojattu]|
| 5 |aihe|Faye H.Hartley|[sähköposti suojattu]|
| 3 |raketti|Christopher S. Payton|[sähköposti suojattu]|
| 7 |raketti|Christopher S. Payton|[sähköposti suojattu]|
| 1 |Neitsyt|Claude M. Mori|[sähköposti suojattu]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Kuten yllä olevasta taulukosta näet, meillä on kaksi päällekkäistä arvoa, jotka tekevät tietokannasta suuremman ilman syytä ja aiheuttavat hitaita nopeuksia.

Opetellaan nyt, kuinka voimme poistaa nämä arvot.

#1 - POISTA LIITY

Yksi tapa poistaa päällekkäiset rivit tietokannasta on käyttää MySQL DELETE JOIN -käskyä. Kysely kuitenkin käyttää tunnuksia päällekkäisten arvojen poistamiseen.

Jos esimerkiksi haluat poistaa päällekkäiset arvot yllä olevasta käyttäjätaulukosta, voimme syöttää:

POISTAA pöytä 1 ALK käyttäjien taulukko 1 SISÄINEN LIITTYÄ SEURAAN käyttäjien taulukko 2 MISSÄ table1.id<table2.id JA table1.email=table2.email;

Kun olet suorittanut yllä olevan kyselyn, poistat päällekkäiset arvot alla olevan tuloksen mukaisesti:

mysql> POISTAA pöytä 1 ALK käyttäjien taulukko 1 SISÄINEN LIITTYÄ SEURAAN käyttäjien taulukko 2 MISSÄ table1.id<table2.id JA table1.email=table2.email;
Kysely OK, 2vaikuttaa riveihin(0,01sek)

mysql> VALITSE * ALK käyttäjille TILAA käyttäjätunnus;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|käyttäjätunnus|koko nimi|sähköposti|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |artemis|Wesley C.Dillard|[sähköposti suojattu]|
| 6 |pimeä aine|Patricia J.Fox|[sähköposti suojattu]|
| 2 |Lehdistö|Tiffany G.Bailey|[sähköposti suojattu]|
| 5 |aihe|Faye H.Hartley|[sähköposti suojattu]|
| 7 |raketti|Christopher S. Payton|[sähköposti suojattu]|
| 1 |Neitsyt|Claude M. Mori|[sähköposti suojattu]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

#2 - Rivi_numero () -toiminto

Toinen menetelmä, jonka voimme toteuttaa, on käyttää MySQL -rivin_numero () -funktiota. Tätä toimintoa tuetaan MySQL -versiossa 8 ja uudemmissa.

Se toimii määrittämällä kullekin riville peräkkäisen int -arvon, jolloin päällekkäisiä arvoja sisältävät rivit saavat arvon yli 1.

Jos haluat lisätietoja tästä toiminnosta, käytä alla olevaa resurssia:

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

Harkitse alla olevaa kyselyä, joka palauttaa päällekkäisten arvojen rivien tunnuksen:

VALITSE id ALK ( VALITSE id,ROW_NUMBER()YLI( OSITTELU Käyttäjätunnuksella TILAA käyttäjätunnus) KUTEN row_var ALK käyttäjille)t1 MISSÄ row_var> 1;

Kun olet suorittanut yllä olevan kyselyn, sinun pitäisi saada luettelo tunnuksista alla olevan tuloksen mukaisesti:

+ ---- +
|id|
+ ---- +
| 6 |
| 7 |
+ ---- +
2rivit sisään aseta (0,01sek)

Jos haluat poistaa arvot, vaihda SELECT -käsky DELETE -lauseeseen seuraavasti:

POISTAA ALK käyttäjille MISSÄ id SISÄÄN ( VALITSE id ALK ( VALITSE id,ROW_NUMBER()YLI( OSITTELU Käyttäjätunnuksella TILAA käyttäjätunnus) KUTEN row_var ALK käyttäjille)t1 MISSÄ row_var> 1);

Lopuksi voit tarkistaa SELECT -käskyn avulla, että päällekkäiset arvot on poistettu.

mysql> VALITSE * alkaen käyttäjille TILAA käyttäjätunnus;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|käyttäjätunnus|koko nimi|sähköposti|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |artemis|Wesley C.Dillard|[sähköposti suojattu]|
| 4 |pimeä aine|Patricia J.Fox|[sähköposti suojattu]|
| 2 |Lehdistö|Tiffany G.Bailey|[sähköposti suojattu]|
| 5 |aihe|Faye H.Hartley|[sähköposti suojattu]|
| 3 |raketti|Christopher S. Payton|[sähköposti suojattu]|
| 1 |Neitsyt|Claude M. Mori|[sähköposti suojattu]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Johtopäätös

Tässä opetusohjelmassa keskustelimme kahdesta tavasta poistaa päällekkäiset arvot tietokannasta. Suuret tietokannat, erityisesti yleisessä käytössä, voivat sisältää monia päällekkäisiä arvoja ulkoisesta tuonnista ja muista virheistä. Siksi on jatkettava päällekkäisten arvojen tyhjentämistä sen varmistamiseksi, että sovellukset toimivat optimaalisesti.