Kaip MySQL užklausa apdoroja pasikartojančius duomenis?Filtruokite, kad pašalintumėte pasikartojančius duomenų pareiškimus

MySQLKaip užklausos apdoroja pasikartojančius duomenis?Filtruokite, kad pašalintumėte pasikartojančius duomenų pareiškimus

MySQL Pasikartojančių duomenų tvarkymas

Kai kuriose MySQL duomenų lentelėse gali būti pasikartojančių įrašų. Kai kuriais atvejais leidžiame pasikartojančius duomenis, tačiau kartais taip pat turime ištrinti šiuos pasikartojančius duomenis.

Šiame skyriuje supažindinsime, kaip išvengti duomenų dubliavimo duomenų lentelėje ir kaip ištrinti pasikartojančius duomenis duomenų lentelėje.


Užkirsti kelią duomenų dubliavimui lentelėse

Nurodytą lauką MySQL duomenų lentelėje galite nustatyti kaip PIRMINIS RAKTAS arba UNIKALUS (unikalus) Indeksas, užtikrinantis duomenų unikalumą.

Pabandykime pavyzdį: Žemiau esančioje lentelėje nėra indeksų ir pirminių raktų, todėl lentelėje galima naudoti kelis pasikartojančius įrašus.

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

Jei lentelėje norite nustatyti laukus vardas_vardas ir pavardė, duomenys negali būti kartojami, galite nustatyti dvigubo pirminio rakto režimą, kad būtų nustatytas duomenų unikalumas. Jei nustatote dvigubą pirminį raktą, numatytoji to rakto reikšmė negali būti NULL, bet galima nustatyti į NOT NULL.taip:

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)
);

Jei nustatome unikalų indeksą, įterpiant pasikartojančius duomenis, SQL sakinys nepavyks sėkmingai vykdyti ir išmes klaidą.

Skirtumas tarp INSERT IGNORE INTO ir INSERT INTO yra tas, kad INSERT IGNORE ignoruoja duomenis, kurie jau yra duomenų bazėje.Jei duomenų bazėje nėra duomenų, įterps naujus duomenis, o jei yra, tai praleis.Tokiu būdu galima išsaugoti esamus duomenis duomenų bazėje ir pasiekti duomenų įterpimo į tarpą tikslą.

Šiame pavyzdyje naudojama INSERT IGNORE INTO, kuri vykdoma be klaidų ir neįterpia pasikartojančių duomenų į duomenų lentelę:

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 Įterpiant duomenis, nustačius įrašo unikalumą, įterpus pasikartojančius duomenis, klaida nebus grąžinta, o bus grąžintas tik įspėjimas.Ir REPLACE INTO į, jei yra pagrindinis arba unikalus įrašas, pirmiausia jį ištrinkite.Įveskite naują įrašą.

Kitas būdas nustatyti duomenų unikalumą yra pridėti UNIKALĮ indeksą, pavyzdžiui:

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 dubliuoja duomenis

Žemiau mes suskaičiuosime pasikartojančių vardo_vardas ir pavardės_vardo įrašų skaičių lentelėje:

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

Aukščiau pateiktas užklausos sakinys pateiks pasikartojančių įrašų skaičių lentelėje person_tbl.Apskritai, norėdami pateikti užklausą dėl pasikartojančių verčių, atlikite šiuos veiksmus:

  • Nustatykite, kuriame stulpelyje galimos pasikartojančios reikšmės.
  • Norėdami išvardyti tuos stulpelius, stulpelių pasirinkimo sąraše naudokite COUNT (*).
  • Stulpeliai, išvardyti punkte GROUP BY.
  • Sąlyga HAVING nustato pakartojimų skaičių, didesnį nei 1.

filtruoti pasikartojančius duomenis

Jei reikia nuskaityti unikalius duomenis, SELECT sakinyje galite naudoti raktinį žodį DISTINCT, kad filtruotumėte pasikartojančius duomenis.

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

Taip pat galite naudoti GROUP BY, kad nuskaitytumėte unikalius duomenis iš lentelės:

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

panaikinti duomenų dubliavimą

Jei norite ištrinti pasikartojančius duomenis duomenų lentelėje, galite naudoti šį SQL sakinį:

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;

Žinoma, duomenų lentelėje taip pat galite įtraukti INDEX (indeksą) ir PRIMAY KEY (pirminį raktą), kad ištrintumėte pasikartojančius lentelės įrašus.Toliau nurodyti metodai:

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

Hope Chen Weiliang tinklaraštis ( https://www.chenweiliang.com/ ) bendrinamas „Kaip MySQL pateikia užklausas ir tvarko pasikartojančius duomenis?Filtravimo ir dubliavimo pareiškimai“ jums padės.

Kviečiame pasidalinti šio straipsnio nuoroda:https://www.chenweiliang.com/cwl-499.html

Sveiki atvykę į Chen Weiliang tinklaraščio Telegram kanalą, kad gautumėte naujausius atnaujinimus!

🔔 Būkite pirmas, kuris kanalo viršaus kataloge gaus vertingą „ChatGPT turinio rinkodaros AI įrankio naudojimo vadovą“! 🌟
📚 Šis vadovas turi didžiulę vertę, 🌟Tai reta galimybė, nepraleiskite jos! ⏰⌛💨
Dalinkitės ir like jei patiko!
Jūsų dalijimasis ir paspaudimai „Patinka“ yra mūsų nuolatinė motyvacija!

 

发表 评论

Jūsų el. Pašto adresas nebus paskelbtas. Naudojami privalomi laukai * Etiketė

slinkite į viršų