Синтакса
Следи синтакса упита 'Упсерт' ОН ЦОНФЛИЦТ.
>> ИНСЕРТ ИНТО име_табеле (листа_колона) ВАЛУЕ (листа_вредности) У КОНФЛИКТУ циљна акција;Покрените шкољку командне линије ПостгреСКЛ
За почетак покрените љуску командне линије ПостгреСКЛ из менија Апплицатион. Повежите га са потребним сервером. Унесите име базе података на којем желите да радите. Да бисте радили на другом порту, унесите број порта и корисничко име са којим желите да радите. Да бисте наставили са подразумеваним параметрима, оставите размаке како јесу и притисните „Ентер“ при свакој опцији. Додајте лозинку за изабрано корисничко име и ваша командна љуска би требала бити спремна за употребу.
Пример 1:
Сада можемо да започнемо са сукобом „Упсерт“. Претпоставимо да у изабраној бази података имате табелу под називом „особа“ са неким пољима која приказују записе различитих особа. Ови записи показују имена људи, њихове старости и њихове градове и државе. Табела је приказана испод.
>> ОДАБЕРИ * ОД особе;
Важно је знати како може доћи до грешке или сукоба. Поље табеле 'ид', које је уједно и примарни кључ, садржи вредности од 1 до 15. Када корисник покуша да у табелу убаци неке дупликате записа, долази до сукоба.
Покушајмо са следећом изјавом ИНСЕРТ, убацујући записе у табелу „особа“. Овај упит ће проузроковати грешку јер вредност '3' поља 'ид' већ постоји у табели.
>> ИНСЕРТ ИНТО персон (ид, наме, аге, цити, цоунтри) ВРЕДНОСТИ ('3', 'Хабиб', '45', 'Цхаквал', 'Пакистан');
Пример 2: Подигните са клаузулом ОН ЦОНФЛИЦТ
Клаузулу ОН ЦОНФЛИЦТ ћемо користити да бисмо избегли ИНСЕРТ упит који узрокује ову грешку због уметања дуплираних записа. Команда ОН ЦОНФЛИЦТ има две фразе различитих употреба.
- УРАДИТЕ: Извршите операције за превазилажење сукоба.
- НЕ РАДИ НИШТА: Избегавајте сукоб не радећи ништа.
Пример 3: Подигните са клаузулом НЕ НИШТА
У овом примеру ћемо погледати клаузулу ДО НОТХИНГ. Ова клаузула објашњава да се неће извршити ниједна операција у случају грешке или сукоба. Другим речима, ова клаузула ће само избећи сукоб или грешку.
Дакле, покушајмо са истом наредбом ИНСЕРТ коју смо раније користили за додавање дупликата записа у табелу 'особа', уз неколико додатих промена. Додали смо клаузулу ОН ЦОНФЛИЦТ, заједно са наредбом ДО НОТХИНГ у овој клаузули. Клаузула ОН ЦОНФЛИЦТ примењена је на јединствени ступац 'ид'. То значи да ће, када корисник покуша да убаци дупликат вредности у колону 'ид', избећи сукоб и ништа не учинити. Као што можете видети на доњој слици, неће ни убацити нови запис у табелу, нити ће ажурирати претходни запис.
>> ИНСЕРТ ИНТО персон (ид, наме, аге, цити, цоунтри) ВРЕДНОСТИ ('3', 'Хабиб', '45', 'Цхаквал', 'Пакистан') О КОНФЛИКТУ (ид) НЕМОЈТЕ НИШТА;
Проверимо поново табелу „особа“ ради аутентичности. Као што видите на доњој слици, у табели нису унете промене.
>> ОДАБЕРИ * ОД особе;
Пример 2: Употријебите клаузулу ДО
Даље ћемо погледати клаузуле ОН ЦОНФЛИЦТ и ДО. Као што му име говори, клаузула ___ извршиће радњу у случају грешке или сукоба када се дупликата вредност убаци у табелу. Користићемо исту наредбу за уметање коју смо претходно користили за уметање дупликата записа у табелу 'особа', са мањом изменом. Додали смо клаузулу ОН ЦОНФЛИЦТ са клаузулом ДО унутар ње. Када корисник покуша да уметне нејединствену вредност у колону 'ид', извршиће акцију како би избегао сукоб. Користимо клаузулу УПДАТЕ након клаузуле ДО, која указује на ажурирање података у табели „особа“. Кључна реч СЕТ користи се за подешавање вредности колоне 'наме' на нову вредност, 'Хабиб', користећи кључну реч ЕКСЦЛУДЕД где је 'ид' тренутно '3'. Ако извршите следећи упит, видећете да је упит извршен.
>> ИНСЕРТ ИНТО персон (ид, наме, аге, цити, цоунтри) ВРЕДНОСТИ ('3', 'Хабиб', '45', 'Цхаквал', 'Пакистан') О КОНФЛИКТУ (ид) ДО АЖУРИРАНИХ СЕТ наме = ИСКЉУЧЕНО.име;
Записи табеле „особа“ морају да се преузму да би се виделе промене горњег упита. Ако извршите следећи упит у љусци командне линије, требали бисте видети следећи излаз.
>> ОДАБЕРИ * ОД особе;Као што можете видети из доњег резултата, име особе је ажурирано на „Хабиб“, где је „ид“ „3.'
Такође можете ажурирати записе у више колона помоћу кључне речи ЕКСЦЛУДЕД у клаузули ОН ЦОНФЛИЦТ упита ИНСЕРТ, као што је приказано испод.
>> ИНСЕРТ ИНТО персон (ид, наме, аге, цити, цоунтри) ВАЛУЕС ('3', 'Хабиб', '45', 'Цхаквал', 'Пакистан') ОН ЦОНФЛИЦТ (ид) ДО УПДАТЕ СЕТ СЕТ наме = ЕКСЦЛУДЕД.име, град = ИСКЉУЧЕНО.град;
Промене су приказане у наставку.
>> ОДАБЕРИ * ОД особе;
Закључак
Овај чланак вам је показао како се користи ПостгреСКЛ 'Упсерт' са клаузулом ОН ЦОНФЛИЦТ, заједно са радњама ДО и ДО НОТХИНГ. Након читања овог чланка, надамо се да ћете лакше разумети како се користи ПостгреСКЛ 'Упсерт.'