Мақала анықтамалығы
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 Деректерді енгізу кезінде жазбаның бірегейлігі орнатылғаннан кейін, қайталанатын деректер енгізілсе, қате қайтарылмайды, тек ескерту қайтарылады.Ал егер негізгі немесе бірегей жазба болса, алдымен оны жойыңыз.Жаңа жазба енгізіңіз.
Деректеріңіздің бірегейлігін орнатудың тағы бір жолы - 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 каналымызға қосылыңыз!
Бөлісу және ұнаса лайк! Сіздің бөлісулеріңіз бен лайктарыңыз біздің тұрақты мотивациямыз болып табылады!