Hogyan törölheti a MySQL az ismétlődő sorokat?

How Mysql Delete Duplicate Rows



A MySQL egy relációs adathalmaz, amely sorokat és oszlopokat tartalmazó táblázatokban tárolja az adatokat. Az adatbázisban tárolt adatok azonban tartalmazhatnak ismétlődő értékeket, amelyeket az alkalmazások vagy a felhasználók hibái okoznak.

Ebben az oktatóanyagban megtanuljuk, hogyan lehet eltávolítani az ismétlődő sorokat a MySQL adatbázisból az adatbázis méretének csökkentése és a kiszolgáló teljesítményének növelése érdekében.







Mielőtt folytatnánk, feltételezzük:



  1. A MySQL telepítve van és fut a rendszeren
  2. Ön root hozzáféréssel rendelkezik az adatbázishoz.
  3. Hozzáférhet egy adatbázishoz kísérletezéshez vagy teszteléshez

JEGYZET : Ha egy mintaadatbázisra van szüksége az útmutatóban szereplő fogalmak kipróbálásához, fontolja meg a Sakila adatbázist, vagy töltse le az ebben az útmutatóban használt adatbázis egy példányát.



Az erőforrások az alábbiakban találhatók:





Alapvető használat

Mielőtt elkezdenénk, szándékosan létrehozunk egy táblázatot, amely ismétlődő értékeket tartalmaz tesztelés céljából. A művelet végrehajtásához szükséges SQL lekérdezések az alábbiak:

HASZNÁLAT világ;
CSEPP ASZTAL HA LÉTEZIK felhasználók;
TEREMT ASZTAL felhasználók(id INT ELSŐDLEGES KULCS NEM NULLA AUTO_INCREMENT ,felhasználónév VARCHAR (10) NEM NULLA ,teljes név VARCHAR (húsz),email VARCHAR (255) NEM NULLA );
INSERT BA felhasználók(felhasználónév,teljes név,email) ÉRTÉKEK
('Szűz', 'Claude M. Mori', '[email protected]'),
('nyomja meg', 'Tiffany G. Bailey', '[email protected]'),
('rakéta', 'Christopher S. Payton', '[email protected]'),
('sötét anyag', 'Patricia J. Fox', '[email protected]'),
('tantárgy', 'Faye H. Hartley', '[email protected]'),
('sötét anyag', 'Patricia J. Fox', '[email protected]'),
('rakéta', 'Christopher S. Payton', '[email protected]'),
('Artemisz', 'Wesley C. Dillard', '[email protected]');

Nyugodtan módosítsa a fenti lekérdezést az igényeinek megfelelően. Gondoskodnia kell arról is, hogy a hibák elkerülése érdekében létrehozza az adatbázist (világ).



Most, ha minden adatot a táblán belül kapunk, és a felhasználónév szerint, látjuk a másolatokat, amint az látható:

mysql> használat világ;
Adatbázis megváltozott
mysql> SELECT * TÓL TŐL felhasználók RENDEZÉS felhasználónév;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|felhasználónév|teljes név|email|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |Artemisz|Wesley C. Dillard|[e -mail védett]|
| 4 |sötét anyag|Patricia J. Fox|[e -mail védett]|
| 6 |sötét anyag|Patricia J. Fox|[e -mail védett]|
| 2 |nyomja meg|Tiffany G. Bailey|[e -mail védett]|
| 5 |tantárgy|Faye H. Hartley|[e -mail védett]|
| 3 |rakéta|Christopher S. Payton|[e -mail védett]|
| 7 |rakéta|Christopher S. Payton|[e -mail védett]|
| 1 |Szűz|Claude M. Mori|[e -mail védett]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Amint a fenti táblázatból látható, két ismétlődő értékkel rendelkezünk, amelyek ok nélkül megnövelik az adatbázist, és lassú sebességet okoznak.

Most tanuljuk meg, hogyan távolíthatjuk el ezeket az értékeket.

#1 - CSATLAKOZÁS TÖRLÉSE

Az ismétlődő sorok eltávolításának egyik módja az adatbázisban a MySQL DELETE JOIN utasítás használata. A lekérdezés azonban azonosítókat használ az ismétlődő értékek eltávolítására.

Például a fenti felhasználói táblázatban szereplő ismétlődő értékek eltávolításához a következőket írhatjuk be:

TÖRÖL Asztal 1 TÓL TŐL felhasználói táblázat1 BELSŐ CSATLAKOZIK felhasználói táblázat2 AHOL tábla1.id<tábla2.id ÉS table1.email=table2.email;

A fenti lekérdezés végrehajtása után eltávolítja az ismétlődő értékeket az alábbi kimeneten látható módon:

mysql> TÖRÖL Asztal 1 TÓL TŐL felhasználói táblázat1 BELSŐ CSATLAKOZIK felhasználói táblázat2 AHOL tábla1.id<tábla2.id ÉS table1.email=table2.email;
Lekérdezés OK, 2sorok érintettek(0,01mp)

mysql> SELECT * TÓL TŐL felhasználók RENDEZÉS felhasználónév;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|felhasználónév|teljes név|email|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |Artemisz|Wesley C. Dillard|[e -mail védett]|
| 6 |sötét anyag|Patricia J. Fox|[e -mail védett]|
| 2 |nyomja meg|Tiffany G. Bailey|[e -mail védett]|
| 5 |tantárgy|Faye H. Hartley|[e -mail védett]|
| 7 |rakéta|Christopher S. Payton|[e -mail védett]|
| 1 |Szűz|Claude M. Mori|[e -mail védett]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

#2 - Sor_száma () függvény

A második módszer, amelyet megvalósíthatunk, a MySQL row_number () függvény használata. Ezt a funkciót a MySQL 8 -as vagy újabb verziója támogatja.

Úgy működik, hogy minden sorhoz soros int értéket rendel, és az ismétlődő értékeket tartalmazó sorok értéke 1 -nél magasabb.

Ha többet szeretne megtudni erről a funkcióról, használja az alábbi forrást:

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

Tekintsük az alábbi lekérdezést, amely az ismétlődő értékekkel rendelkező sorok azonosítóját adja vissza:

SELECT id TÓL TŐL ( SELECT id,ROW_NUMBER()FELETT( PARTITION Felhasználónév szerint RENDEZÉS felhasználónév) MINT sor_var TÓL TŐL felhasználók)t1 AHOL sor_var> 1;

A fenti lekérdezés végrehajtása után meg kell kapnia az azonosítók listáját az alábbi kimenet szerint:

+ ---- +
|id|
+ ---- +
| 6 |
| 7 |
+ ---- +
2sorok ban ben készlet (0,01mp)

Ha el szeretné távolítani az értékeket, egyszerűen cserélje ki a SELECT utasítást a DELETE utasításra az alábbiak szerint:

TÖRÖL TÓL TŐL felhasználók AHOL id BAN BEN ( SELECT id TÓL TŐL ( SELECT id,ROW_NUMBER()FELETT( PARTITION Felhasználónév szerint RENDEZÉS felhasználónév) MINT sor_var TÓL TŐL felhasználók)t1 AHOL sor_var> 1);

Végül a SELECT utasítással ellenőrizheti, hogy az ismétlődő értékek eltávolításra kerültek -e.

mysql> SELECT * tól től felhasználók RENDEZÉS felhasználónév;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|felhasználónév|teljes név|email|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |Artemisz|Wesley C. Dillard|[e -mail védett]|
| 4 |sötét anyag|Patricia J. Fox|[e -mail védett]|
| 2 |nyomja meg|Tiffany G. Bailey|[e -mail védett]|
| 5 |tantárgy|Faye H. Hartley|[e -mail védett]|
| 3 |rakéta|Christopher S. Payton|[e -mail védett]|
| 1 |Szűz|Claude M. Mori|[e -mail védett]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Következtetés

Ebben az oktatóanyagban az ismétlődő értékek adatbázisból történő eltávolításának két módját tárgyaltuk. A nagy adatbázisok, különösen a közös használatúak, sok ismétlődő értéket tartalmazhatnak a külső importból és egyéb hibákból. Ezért szükség van az ismétlődő értékek törlésére annak biztosítása érdekében, hogy az alkalmazások optimálisan működjenek.