Як запыт MySQL апрацоўвае дублікаты дадзеных?Фільтр для выдалення дублікатаў даных

MySQLЯк запыты апрацоўваюць дублікаты дадзеных?Фільтр для выдалення дублікатаў даных

MySQL Апрацоўка дублікатаў дадзеных

У некаторых табліцах даных MySQL могуць быць дублікаты запісаў. У некаторых выпадках мы дапускаем існаванне дублікатаў даных, але часам нам таксама трэба выдаліць гэтыя дублікаты даных.

У гэтай главе мы раскажам, як прадухіліць дублікаты дадзеных у табліцы даных і як выдаліць дублікаты даных у табліцы даных.


Прадухіленне дублікатаў дадзеных у табліцах

Вы можаце ўсталяваць азначанае поле ў табліцы дадзеных MySQL як ПЕРШАСНЫ КЛЮЧ альбо UNIQUE (унікальны) Індэкс для забеспячэння ўнікальнасці дадзеных.

Давайце паспрабуем прыклад: у прыведзенай ніжэй табліцы няма індэксаў і першасных ключоў, таму табліца дазваляе некалькі дублікатаў запісаў.

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

Калі вы хочаце задаць палі first_name і last_name у табліцы, даныя не могуць паўтарацца, вы можаце ўсталяваць рэжым падвойнага першаснага ключа, каб усталяваць унікальнасць даных. Калі вы задаеце двайны першасны ключ, значэнне гэтага ключа па змаўчанні не можа быць NULL, але можа быць усталяваны ў NOT NULL.Наступным чынам:

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

Калі мы ўсталюем унікальны індэкс, то пры ўстаўцы дублікатаў дадзеных SQL-аператар не выканаецца паспяхова і выдасць памылку.

Розніца паміж INSERT IGNORE INTO і INSERT INTO заключаецца ў тым, што INSERT IGNORE ігнаруе даныя, якія ўжо існуюць у базе даных. Калі ў базе даных няма, будуць устаўлены новыя даныя, а калі даныя ёсць, то гэтыя даныя будуць прапушчаны.Такім чынам можна захаваць існуючыя даныя ў базе дадзеных і дасягнуць мэты ўстаўкі даных у прабел.

У наступным прыкладзе выкарыстоўваецца INSERT IGNORE INTO, які выконваецца без памылак і не ўстаўляе дублікаты даных у табліцу даных:

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 Пры ўстаўцы даных, пасля ўстаноўкі ўнікальнасці запісу, калі ўстаўляюцца дублікаты даных, памылка не вяртаецца, а толькі папярэджанне.І REPLACE INTO на, калі ёсць асноўны або ўнікальны запіс, спачатку выдаліце ​​яго.Уставіць новы запіс.

Іншы спосаб усталяваць унікальнасць вашых дадзеных - дадаць УНІКАЛЬНЫ індэкс, як гэта:

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

Статыстыка дублюючых дадзеных

Ніжэй мы падлічым колькасць паўтаральных запісаў імя і прозвішча ў табліцы:

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

Прыведзены вышэй аператар запыту верне колькасць дублікатаў запісаў у табліцы person_tbl.Увогуле, каб запытаць паўтаральныя значэнні, зрабіце наступнае:

  • Вызначце, які слупок змяшчае магчымыя паўтаральныя значэнні.
  • Выкарыстоўвайце COUNT(*) у спісе выбару слупкоў, каб пералічыць гэтыя слупкі.
  • Слупкі, пералічаныя ў сказе GROUP BY.
  • Указ HAVING задае колькасць паўтораў больш за 1.

фільтраваць дублікаты дадзеных

Калі вам трэба прачытаць унікальныя дадзеныя, вы можаце выкарыстоўваць ключавое слова DISTINCT у аператары SELECT для фільтрацыі дублікатаў дадзеных.

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

Вы таксама можаце выкарыстоўваць GROUP BY для чытання унікальных дадзеных з табліцы:

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

дэдуплікацыя дадзеных

Калі вы хочаце выдаліць дублікаты дадзеных у табліцы дадзеных, вы можаце выкарыстоўваць наступны аператар 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;

Вядома, вы таксама можаце дадаць INDEX (індэкс) і PRIMAY KEY (першасны ключ) у табліцу даных, каб выдаліць дублікаты запісаў у табліцы.Метады, як паказана ніжэй:

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

Блог Hope Chen Weiliang ( https://www.chenweiliang.com/ ) падзяліўся "Як MySQL запытвае і апрацоўвае дублікаты дадзеных?Аператары фільтрацыі і дэдуплікацыі» дапамогуць вам.

Запрашаем падзяліцца спасылкай на гэты артыкул:https://www.chenweiliang.com/cwl-499.html

Каб адкрыць больш схаваных хітрасцяў🔑, далучайцеся да нашага канала ў Telegram!

Падзяліцеся і пастаўце лайкі, калі вам гэта падабаецца! Вашы акцыі і лайкі - наша пастаянная матывацыя!

 

发表 评论

Ваш электронны адрас не будзе апублікаваны. 必填 项 已 用 * Этыкетка

Пракрутка да пачатку