MySQL сурамы кайталанма маалыматтарды кантип иштетет?Кайталанма маалымат билдирүүсүн алып салуу үчүн чыпкалоо

MySQLСурамдар кайталанма маалыматтарды кантип иштетет?Кайталанма маалымат билдирүүсүн алып салуу үчүн чыпкалоо

MySQL Кайталанма маалыматтарды иштетүү

Кээ бир MySQL берилиш таблицаларында кайталанма жазуулар болушу мүмкүн.Кээ бир учурларда биз кайталанма маалыматтардын болушуна жол беребиз, бирок кээде бул кайталанган маалыматтарды жок кылышыбыз керек.

Бул бөлүмдө биз маалымат таблицасында кайталанма маалыматтарды кантип алдын алуу жана маалымат таблицасындагы кайталанма маалыматтарды кантип жок кылуу керектигин тааныштырабыз.


Таблицаларда кайталанма маалыматтарды болтурбоо

MySQL маалыматтар таблицасында көрсөтүлгөн талааны катары орното аласыз БАШКЫ АЧКЫЧ же UNIQUE (уникалдуу) Маалыматтын уникалдуулугун камсыз кылуу үчүн индекс.

Келгиле, бир мисал келтирели: Төмөнкү таблицада индекстер жана негизги ачкычтар жок, андыктан таблица бир нече кайталанган жазууларга жол берет.

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 Маалыматтарды киргизүүдө, жазуунун уникалдуулугу коюлгандан кийин, кайталанма маалыматтар киргизилсе, эч кандай ката кайтарылбайт, бирок эскертүү гана кайтарылат.Ал эми REPLACE INTO дегенге негизги же уникалдуу жазуу бар болсо, алгач аны жок кылыңыз.Жаңы жазуу киргизүү.

Дайындарыңыздын уникалдуулугун коюунун дагы бир жолу - бул UNIQUE индексин кошуу:

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 куралын колдонуу боюнча колдонмону" биринчилерден болуп алыңыз! 🌟
📚 Бул колдонмо чоң баалуулуктарды камтыйт, 🌟Бул сейрек кездешүүчү мүмкүнчүлүк, аны өткөрүп жибербеңиз! ⏰⌛💨
Бөлүшүп, жакса лайк!
Сиздин бөлүшүүңүз жана лайктарыңыз биздин үзгүлтүксүз мотивациябыз!

 

发表 评论

Электрондук почта дарегиңиз жарыяланбайт. Милдеттүү талаалар колдонулат * 标注

өйдө сыдырыңыз