Kuidas MySQL päring dubleeritud andmeid käsitleb?Filtreerige duplikaatandmete väljavõtte eemaldamiseks

MySQLKuidas päringud käsitlevad dubleeritud andmeid?Filtreerige duplikaatandmete väljavõtte eemaldamiseks

MySQL Dubleerivate andmete käsitlemine

Mõnedes MySQL-i andmetabelites võib esineda dubleerivaid kirjeid.Mõnel juhul lubame dubleerivate andmete olemasolu, kuid mõnikord peame ka need dubleerivad andmed kustutama.

Selles peatükis tutvustame, kuidas vältida andmete dubleerimist andmetabelis ja kuidas kustutada dubleerivaid andmeid andmetabelis.


Vältige andmete dubleerimist tabelites

Saate määrata määratud välja MySQL-i andmetabelis kui ESMANE VÕTI või UNIQUE (ainulaadne) Indeks andmete kordumatuse tagamiseks.

Proovime näidet: allolevas tabelis pole indekseid ega primaarvõtmeid, seega lubab tabel mitut dubleerivat kirjet.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Kui soovite tabelis määrata väljad ees_nimi ja perekonnanimi, siis andmeid korrata ei saa, andmete kordumatuse määramiseks saate määrata topeltprimaarvõtme režiimi Kui määrate topeltprimaarvõtme, siis selle võtme vaikeväärtus ei saa olla NULL, kuid selle saab määrata väärtusele NOT NULL.Järgnevalt:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Kui määrame kordumatu indeksi, siis dubleerivate andmete sisestamisel SQL-lause täitmine ebaõnnestub ja annab vea.

Erinevus INSERT IGNORE INTO ja INSERT INTO vahel seisneb selles, et INSERT IGNORE ignoreerib andmebaasis juba olemasolevaid andmeid.Kui andmebaasis andmeid pole, siis sisestab uued andmed ja andmete olemasolul jätab need andmed vahele.Nii saab säilitada andmebaasis olemasolevaid andmeid ja saavutada andmete lünka sisestamise eesmärgi.

Järgmises näites kasutatakse käsku INSERT IGNORE INTO, mis käivitub vigadeta ja ei lisa andmetabelisse dubleerivaid andmeid:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO Andmete sisestamisel pärast kirje unikaalsuse määramist topeltandmete sisestamisel viga ei tagastata, vaid tagastatakse ainult hoiatus.Ja REPLACE INTO, kui on olemas esmane või kordumatu kirje, kustutage see kõigepealt.Sisestage uus kirje.

Teine võimalus andmete unikaalsuse määramiseks on lisada UNIQUE indeks, nagu see:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Statistika dubleerib andmeid

Allpool loendame tabelis eesnimi ja perekonnanimi duplikaatkirjete arvu:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

Ülaltoodud päringulause tagastab tabelis person_tbl olevate duplikaatkirjete arvu.Üldjuhul tehke korduvate väärtuste päringu tegemiseks järgmist.

  • Määrake, milline veerg sisaldab võimalikke dubleerivaid väärtusi.
  • Kasutage veergude loendis COUNT(*) nende veergude loetlemiseks.
  • Punktis GROUP BY loetletud veerud.
  • HAVING-klausel määrab korduste arvu, mis on suurem kui 1.

filtreerige dubleerivad andmed

Kui teil on vaja lugeda kordumatuid andmeid, saate dubleeritud andmete filtreerimiseks kasutada SELECT-lauses märksõna DISTINCT.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

Samuti saate tabelist ainulaadsete andmete lugemiseks kasutada rühma GROUP BY:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

andmete dubleerimine

Kui soovite kustutada andmetabelis dubleerivad andmed, saate kasutada järgmist SQL-lauset:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Loomulikult saab andmetabelisse lisada ka INDEX (indeks) ja PRIMAY KEY (esmane võti), et kustutada tabelist dubleerivaid kirjeid.Allpool toodud meetodid:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

Hope Chen Weiliangi ajaveeb ( https://www.chenweiliang.com/ ) jagatud "Kuidas MySQL küsib ja töötleb dubleerivaid andmeid?Filtreerimise ja dubleerimise avaldused" aitab teid.

Tere tulemast selle artikli linki jagama:https://www.chenweiliang.com/cwl-499.html

Tere tulemast Chen Weiliangi ajaveebi Telegrami kanalile, et saada uusimaid värskendusi!

🔔 Olge esimene, kes saab kanali ülemises kataloogis väärtusliku "ChatGPT sisuturunduse AI tööriista kasutamise juhendi"! 🌟
📚 See juhend sisaldab tohutut väärtust, 🌟See on harukordne võimalus, ärge jätke seda kasutamata! ⏰⌛💨
Jaga ja like kui meeldib!
Teie jagamine ja meeldimised on meie pidev motivatsioon!

 

发表 评论

Teie e-posti aadressi ei avaldata. Kasutatakse kohustuslikke välju * Silt

kerige üles