Ako dotaz MySQL spracováva duplicitné údaje?Filter na odstránenie duplicitných údajových výpisov

MySQLAko dopyty spracovávajú duplicitné údaje?Filter na odstránenie duplicitných údajových výpisov

MySQL Spracovanie duplicitných údajov

V niektorých tabuľkách údajov MySQL môžu byť duplicitné záznamy. V niektorých prípadoch povoľujeme existenciu duplicitných údajov, niekedy však musíme tieto duplicitné údaje aj vymazať.

V tejto kapitole si predstavíme, ako zabrániť duplicitným údajom v tabuľke údajov a ako duplicitné údaje v tabuľke údajov odstrániť.


Zabráňte duplicitným údajom v tabuľkách

Zadané pole v tabuľke údajov MySQL môžete nastaviť ako PRIMÁRNY KĽÚČ alebo UNIQUE (jedinečný) Index na zabezpečenie jedinečnosti údajov.

Skúsme príklad: V tabuľke nižšie nie sú žiadne indexy a primárne kľúče, takže tabuľka umožňuje viacero duplicitných záznamov.

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

Ak chcete v tabuľke nastaviť polia meno a priezvisko, údaje sa nemôžu opakovať, môžete nastaviť režim dvojitého primárneho kľúča na nastavenie jedinečnosti údajov. Ak nastavíte dvojitý primárny kľúč, predvolená hodnota tohto kľúča nemôže byť NULL, ale dá sa nastaviť na NOT NULL.Nasledovne:

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

Ak nastavíme jedinečný index, potom pri vkladaní duplicitných údajov sa príkaz SQL nepodarí úspešne vykonať a vyhodí chybu.

Rozdiel medzi INSERT IGNORE INTO a INSERT INTO je v tom, že INSERT IGNORE ignoruje dáta, ktoré už v databáze existujú. Ak v databáze nie sú žiadne dáta, vloží nové dáta, a ak tam dáta sú, tieto dáta preskočí.Týmto spôsobom je možné zachovať existujúce údaje v databáze a dosiahnuť účel vloženia údajov do medzery.

Nasledujúci príklad používa INSERT IGNORE INTO, ktorý sa vykoná bez chyby a bez vloženia duplicitných údajov do tabuľky údajov:

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 Pri vkladaní údajov sa po nastavení jedinečnosti záznamu v prípade vloženia duplicitných údajov nevráti chyba, ale iba varovanie.A REPLACE INTO do Ak existuje primárny alebo jedinečný záznam, bude najskôr vymazaný.Vložte nový záznam.

Ďalším spôsobom, ako nastaviť jedinečnosť údajov, je pridať UNIKÁTNY index, ako je tento:

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

Štatistiky duplicitné údaje

Nižšie spočítame počet duplicitných záznamov krstné_meno a priezvisko v tabuľke:

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

Vyššie uvedený príkaz vráti počet duplicitných záznamov v tabuľke person_tbl.Vo všeobecnosti, ak chcete požiadať o duplicitné hodnoty, postupujte takto:

  • Zistite, ktorý stĺpec obsahuje možné duplicitné hodnoty.
  • Na zobrazenie týchto stĺpcov použite COUNT(*) v zozname na výber stĺpcov.
  • Stĺpce uvedené v klauzule GROUP BY.
  • Klauzula HAVING nastavuje počet opakovaní väčší ako 1.

filtrovať duplicitné údaje

Ak potrebujete čítať jedinečné údaje, môžete použiť kľúčové slovo DISTINCT v príkaze SELECT na filtrovanie duplicitných údajov.

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

Môžete tiež použiť GROUP BY na čítanie jedinečných údajov z tabuľky:

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

deduplikovať údaje

Ak chcete odstrániť duplicitné údaje v tabuľke údajov, môžete použiť nasledujúci príkaz SQL:

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;

Samozrejme môžete do tabuľky údajov pridať aj INDEX (index) a PRIMAY KEY (primárny kľúč), aby ste odstránili duplicitné záznamy v tabuľke.Metódy uvedené nižšie:

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

发表 评论

Vaša emailová adresa nebude zverejnená. 必填 项 已 用 * Štítok

Prejdite na začiatok