MySQL асуулга нь давхардсан өгөгдлийг хэрхэн зохицуулдаг вэ?Давхардсан өгөгдлийн мэдэгдлийг арилгахын тулд шүүнэ үү

MySQLАсуулга нь давхардсан өгөгдлийг хэрхэн зохицуулдаг вэ?Давхардсан өгөгдлийн мэдэгдлийг арилгахын тулд шүүнэ үү

MySQL Давхардсан өгөгдөлтэй ажиллах

Зарим MySQL өгөгдлийн хүснэгтэд давхардсан бүртгэл байж болно.Зарим тохиолдолд бид давхардсан өгөгдөл байхыг зөвшөөрдөг ч заримдаа эдгээр давхардсан өгөгдлийг устгах шаардлагатай болдог.

Энэ бүлэгт бид өгөгдлийн хүснэгтэд давхардсан өгөгдлийг хэрхэн урьдчилан сэргийлэх, өгөгдлийн хүснэгт дэх давхардсан өгөгдлийг хэрхэн устгах талаар танилцуулах болно.


Хүснэгт дэх өгөгдөл давхардахаас сэргийлнэ

Та MySQL өгөгдлийн хүснэгтэд заасан талбарыг дараах байдлаар тохируулж болно АНХАН ТҮЛХҮҮР эсвэл Өвөрмөц (өвөрмөц) Өгөгдлийн өвөрмөц байдлыг хангах индекс.

Нэг жишээ татъя: Доорх хүснэгтэд индекс болон үндсэн түлхүүр байхгүй тул хүснэгт нь олон давхардсан бичлэг хийхийг зөвшөөрдөг.

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

Хүснэгтийн нэр, овог гэсэн талбаруудыг тохируулахыг хүсвэл өгөгдлийг давтах боломжгүй тул өгөгдлийн өвөрмөц байдлыг тохируулахын тулд давхар үндсэн түлхүүрийн горимыг тохируулж болно. Хэрэв та давхар үндсэн түлхүүрийг тохируулсан бол тухайн түлхүүрийн анхдагч утгыг тохируулна уу. 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 Өгөгдөл оруулахдаа бичлэгийн давтагдашгүй байдлыг тохируулсны дараа давхардсан өгөгдөл оруулсан тохиолдолд алдаа гарахгүй, зөвхөн анхааруулга л ирнэ.Хэрэв үндсэн эсвэл өвөрмөц бичлэг байгаа бол эхлээд устгана уу.Шинэ бичлэг оруулах.

Өгөгдлийнхөө өвөрмөц байдлыг тохируулах өөр нэг арга бол УДИРДЛАГА индекс нэмэх явдал юм.

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-ээс их давталтын тоог тогтоодог.

давхардсан өгөгдлийг шүүх

Хэрэв та өвөрмөц өгөгдлийг унших шаардлагатай бол SELECT мэдэгдэл дэх DISTINCT түлхүүр үгийг ашиглан давхардсан өгөгдлийг шүүж болно.

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 сувагт тавтай морил, хамгийн сүүлийн үеийн мэдээг аваарай!

🔔 Сувгийн шилдэг лавлахаас "ChatGPT Content Marketing AI Tool Usage Guide"-г хамгийн түрүүнд аваарай! 🌟
📚 Энэхүү гарын авлага нь асар их үнэ цэнийг агуулсан, 🌟Энэ бол ховор боломж, бүү алдаарай! ⏰⌛💨
Хэрэв танд таалагдвал лайк дарж, хуваалцаарай!
Таны хуваалцах, дуртай зүйл бол бидний байнгын урам зориг юм!

 

发表 评论

Таны имэйл хаяг нийтлэгдэхгүй. 必填 项 已 用 дээр ажиллаж байна * 标注

滚动 到 顶部