Како МиСКЛ брише дупле редове

How Mysql Delete Duplicate Rows



МиСКЛ је релациони скуп података који складишти податке у табелама које имају редове и колоне. Међутим, подаци ускладиштени у бази података могу садржати дупле вредности узроковане грешкама у апликацијама или корисницима.

У овом водичу ћемо научити како уклонити дупле редове у МиСКЛ бази података како бисмо смањили величину базе података и помогли у повећању перформанси сервера.







Пре него што наставимо, претпостављамо:



  1. На вашем систему је инсталиран и ради МиСКЛ
  2. Имате роот приступ бази података.
  3. Имате приступ бази података за експериментисање или тестирање

БЕЛЕШКА : Ако вам је потребна огледна база података за испробавање концепата наведених у овом водичу, размотрите базу података Сакила или преузмите копију базе података која се користи у овом водичу.



Ресурси су наведени испод:





Основна употреба

Пре него што почнемо, намерно ћемо креирати табелу која садржи дупликате вредности за потребе тестирања. СКЛ упити за извршавање ове радње су испод:

УСЕ свет;
КАП СТО АКО ПОСТОЈИ корисника;
КРЕИРАЈ СТО корисника(ид ИНТ ПРИМАРНИ КЉУЧ НЕ НУЛА АУТО_ИНЦРЕМЕНТ ,корисничко име ВАРЦХАР (10) НЕ НУЛА ,пуно име ВАРЦХАР (двадесет),емаил ВАРЦХАР (255) НЕ НУЛА );
ИНСЕРТ У корисника(корисничко име,пуно име,емаил) ВРЕДНОСТИ
('Девица', 'Цлауде М. Мори', '[заштићена е -пошта]'),
('притисните', 'Тиффани Г. Баилеи', '[заштићена е -пошта]'),
('ракета', 'Цхристопхер С. Паитон', '[заштићена е -пошта]'),
('Тамна материја', 'Патрициа Ј. Фок', '[заштићена е -пошта]'),
('тема', 'Фаие Х. Хартлеи', '[заштићена е -пошта]'),
('Тамна материја', 'Патрициа Ј. Фок', '[заштићена е -пошта]'),
('ракета', 'Цхристопхер С. Паитон', '[заштићена е -пошта]'),
('артемида', 'Веслеи Ц. Диллард', '[заштићена е -пошта]');

Слободно измените горњи упит тако да одговара вашим потребама. Такође би требало да се уверите да сте креирали базу података (свет) како бисте избегли грешке.



Сада, ако добијемо све податке унутар табеле и поређамо их према корисничком имену, видећемо дупликате које имамо како је приказано:

мискл> употреба свет;
База података промењено
мискл> СЕЛЕЦТ * ФРОМ корисника НАРУЧИ ПО корисничко име;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ид|корисничко име|пуно име|емаил|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |артемида|Веслеи Ц. Диллард|[заштићена е -пошта]|
| 4 |Тамна материја|Патрициа Ј. Фок|[заштићена е -пошта]|
| 6 |Тамна материја|Патрициа Ј. Фок|[заштићена е -пошта]|
| 2 |притисните|Тиффани Г. Баилеи|[заштићена е -пошта]|
| 5 |предмет|Фаие Х. Хартлеи|[заштићена е -пошта]|
| 3 |ракета|Цхристопхер С. Паитон|[заштићена е -пошта]|
| 7 |ракета|Цхристопхер С. Паитон|[заштићена е -пошта]|
| 1 |Девица|Цлауде М. Мори|[заштићена е -пошта]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Као што можете видети из горње табеле, имамо две дупле вредности које чине базу података већом без разлога и изазивају мале брзине.

Хајде сада да научимо како можемо уклонити ове вредности.

#1 - ИЗБРИШИ ЈОИН

Један од начина за уклањање дуплираних редова у бази података је коришћење МиСКЛ ДЕЛЕТЕ ЈОИН наредбе. Упит, међутим, користи ид -ове за уклањање дуплираних вредности.

На пример, да бисмо уклонили дуплиране вредности у горњој табели корисника, можемо да унесемо:

ДЕЛЕТЕ Табела 1 ФРОМ табела корисника1 УНУТРАШЊИ ПРИДРУЖИТИ табела корисника2 ГДЕ табле1.ид<табле2.ид И табле1.емаил=табле2.емаил;

Када извршите горњи упит, уклонићете дуплиране вредности као што је приказано у доњем испису:

мискл> ДЕЛЕТЕ Табела 1 ФРОМ табела корисника1 УНУТРАШЊИ ПРИДРУЖИТИ табела корисника2 ГДЕ табле1.ид<табле2.ид И табле1.емаил=табле2.емаил;
Упит ОК, 2погођени редови(0,01сец)

мискл> СЕЛЕЦТ * ФРОМ корисника НАРУЧИ ПО корисничко име;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ид|корисничко име|пуно име|емаил|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |артемида|Веслеи Ц. Диллард|[заштићена е -пошта]|
| 6 |Тамна материја|Патрициа Ј. Фок|[заштићена е -пошта]|
| 2 |притисните|Тиффани Г. Баилеи|[заштићена е -пошта]|
| 5 |предмет|Фаие Х. Хартлеи|[заштићена е -пошта]|
| 7 |ракета|Цхристопхер С. Паитон|[заштићена е -пошта]|
| 1 |Девица|Цлауде М. Мори|[заштићена е -пошта]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

#2 - Функција Ров_Нумбер ()

Други метод који можемо применити је коришћење функције МиСКЛ ров_нумбер (). Ова функција је подржана у МиСКЛ верзији 8 и новијим.

Ради тако што сваком реду додељује секвенцијалну вредност инт, при чему редови који садрже дупликате вредности добијају вредност већу од 1.

Да бисте сазнали више о овој функцији, користите доле наведене ресурсе:

хттпс://дев.мискл.цом/доц/рефман/8.0/ен/виндов-фунцтион-десцриптионс.хтмл#фунцтион_ров-нумбер

Размотрите доњи упит који враћа ид редова са дупликатом вредности:

СЕЛЕЦТ ид ФРОМ ( СЕЛЕЦТ ид,РОВ_НУМБЕР()ОВЕР( ПОДЕЛА БИ корисничко име НАРУЧИ ПО корисничко име) КАО ров_вар ФРОМ корисника)т1 ГДЕ ров_вар> 1;

Када извршите горњи упит, требали бисте добити листу ИД -ова као што је приказано у доњем испису:

+ ---- +
|ид|
+ ---- +
| 6 |
| 7 |
+ ---- +
2редове у комплет (0,01сец)

Ако желите да уклоните вредности, једноставно замените израз СЕЛЕЦТ изразом ДЕЛЕТЕ као што је приказано испод:

ДЕЛЕТЕ ФРОМ корисника ГДЕ ид ИН ( СЕЛЕЦТ ид ФРОМ ( СЕЛЕЦТ ид,РОВ_НУМБЕР()ОВЕР( ПОДЕЛА БИ корисничко име НАРУЧИ ПО корисничко име) КАО ров_вар ФРОМ корисника)т1 ГДЕ ров_вар> 1);

Коначно, можете да проверите да ли су дуплиране вредности уклоњене помоћу израза СЕЛЕЦТ.

мискл> СЕЛЕЦТ * фром корисника НАРУЧИ ПО корисничко име;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|ид|корисничко име|пуно име|емаил|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |артемида|Веслеи Ц. Диллард|[заштићена е -пошта]|
| 4 |Тамна материја|Патрициа Ј. Фок|[заштићена е -пошта]|
| 2 |притисните|Тиффани Г. Баилеи|[заштићена е -пошта]|
| 5 |предмет|Фаие Х. Хартлеи|[заштићена е -пошта]|
| 3 |ракета|Цхристопхер С. Паитон|[заштићена е -пошта]|
| 1 |Девица|Цлауде М. Мори|[заштићена е -пошта]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Закључак

У овом водичу смо разговарали о две методе уклањања дуплираних вредности из базе података. Велике базе података, посебно оне у уобичајеној употреби, могу садржати много дуплираних вредности из спољног увоза и других грешака. Због тога постоји потреба да се и даље чисте дупликати вредности како би се осигурало да апликације раде оптимално.