Sintaksė
Toliau pateikiama užklausos „Upsert ON CONLLICT“ sintaksė.
>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT target action;Paleiskite „PostgreSQL“ komandų eilutės apvalkalą
Norėdami pradėti, paleiskite „PostgreSQL“ komandinės eilutės apvalkalą iš „Application“ meniu. Prijunkite jį prie reikalingo serverio. Įveskite duomenų bazės pavadinimą, prie kurio norite dirbti. Norėdami dirbti kitame prievade, įveskite prievado numerį ir vartotojo vardą, su kuriuo norite dirbti. Norėdami tęsti numatytuosius parametrus, palikite tarpus tokius, kokie yra, ir kiekvienoje parinktyje paspauskite „Enter“. Pridėkite pasirinkto vartotojo vardo slaptažodį ir jūsų komandų apvalkalas turėtų būti paruoštas naudoti.
1 pavyzdys:
Dabar galime pradėti nuo „Upsert“ konflikto. Tarkime, kad pasirinktoje duomenų bazėje turite lentelę pavadinimu „asmuo“ su keliais laukais, kuriuose rodomi skirtingų asmenų įrašai. Šie įrašai rodo žmonių vardus, amžių, miestus ir šalis. Lentelė rodoma žemiau.
>> PASIRINKTI * IŠ asmens;
Svarbu žinoti, kaip gali atsirasti klaida ar konfliktas. Lentelės „id“ lauke, kuris taip pat yra pagrindinis raktas, yra reikšmės nuo 1 iki 15. Kai vartotojas bando į lentelę įterpti kelis pasikartojančius įrašus, įvyksta konfliktas.
Pabandykime šį INSERT teiginį, įterpdami įrašus į lentelę „asmuo“. Ši užklausa sukels klaidą, nes „id“ lauko „3“ vertė jau yra lentelėje.
>> INSERT INTO asmuo (asmens kodas, vardas, amžius, miestas, šalis) VERTYBĖS („3“, „Habib“, „45“, „Chakwal“, „Pakistan“);
2 pavyzdys: pakeiskite sąlygą ĮJUNGTI KONFLIKTĄ
Norėdami išvengti INSERT užklausos, kuri sukelia šią klaidą dėl įterptų įrašų dublikatų, naudosime sąlygą ON CONFLICT. Komanda ON CONFLICT pateikia dvi frazes su skirtingais naudojimo būdais.
- Daryk: Atlikite operacijas konfliktui įveikti.
- NIEKO NEDARYK: Venkite konflikto nieko nedarydami.
3 pavyzdys: Patvirtinkite sąlygą „NIEKO NIEKO“
Šiame pavyzdyje mes pažvelgsime į sąlygą NIEKO NIEKO. Šiame punkte patikslinama, kad jokia operacija nebus atliekama dėl klaidos ar konflikto. Kitaip tariant, ši sąlyga padės išvengti tik konfliktų ar klaidų.
Taigi, pabandykime tą pačią INSERT komandą, kurią naudojome anksčiau, kad pridėtume įrašų dublikatus į lentelę „asmuo“, pridėdami keletą pakeitimų. Pridėjome sąlygą „KONFLIKTAS“ kartu su sakiniu „NIEKO NEVEIKTI“. ON CONFLICT sąlyga pritaikyta unikaliam stulpeliui „id“. Tai reiškia, kad kai vartotojas bandys įterpti reikšmės kopiją į stulpelį „id“, jis išvengs konflikto ir nieko nedarys. Kaip matote paveikslėlyje žemiau, jis net neįtrauks naujojo įrašo į lentelę ir neatnaujins ankstesnio įrašo.
>> INSERT INTO asmuo (ID, vardas, amžius, miestas, šalis) VERTYBĖS ('3', 'Habib', '45', 'Chakwal', 'Pakistan') Į KONFLIKTĄ (id) NIEKO NEDARYKITE;
Patikrinkime „asmens“ lentelę dar kartą, kad būtų tikrumas. Kaip matote paveikslėlyje žemiau, lentelėje nebuvo atlikti jokie pakeitimai.
>> PASIRINKTI * IŠ asmens;
2 pavyzdys: pakeiskite DO sąlygą
Toliau mes pažvelgsime į ON CONFLICT ir DO sąlygas. Kaip rodo jo pavadinimas, sąlyga ___ atliks klaidos ar konflikto veiksmą, kai į lentelę bus įterpta reikšmės kopija. Mes naudosime tą pačią įterpimo komandą, kurią anksčiau naudojome įterpdami įrašo kopiją į lentelę „asmuo“, su nedideliais pakeitimais. Įtraukėme sąlygą ON CONFLICT su DO sąlyga jos viduje. Kai vartotojas bandys į „id“ stulpelį įterpti ne unikalią vertę, jis atliks veiksmą, kad išvengtų konflikto. Mes naudojome sąlygą UPDATE po sąlyga DO, kuri nurodo duomenų, esančių lentelėje „asmuo“, atnaujinimą. Raktinis žodis „SET“ naudojamas stulpelio „vardas“ reikšmei nustatyti į naują reikšmę „Habib“, naudojant raktinį žodį IŠIMTAS, kai „id“ šiuo metu yra „3“. Jei vykdysite šią užklausą, pamatysite, kad užklausa buvo atlikta.
>> ĮRAŠYKITE asmenį (ID, vardą, amžių, miestą, šalį).vardas;
Lentelės „asmuo“ įrašai turi būti paimti, kad būtų galima pamatyti anksčiau nurodytos užklausos pakeitimus. Jei vykdote šią užklausą komandinės eilutės apvalkale, turėtumėte pamatyti tolesnę išvestį.
>> PASIRINKTI * IŠ asmens;Kaip matote iš žemiau pateiktos išvesties, asmens vardas atnaujintas į „Habib“, kur „id“ yra „3“."
Taip pat galite atnaujinti įrašus daugiau nei viename stulpelyje naudodami užklausos INSERT sąlygą ON CONFLICT raktinį žodį EXCLUDED, kaip parodyta žemiau.
>> ĮRAŠYKITE asmenį (ID, vardą, amžių, miestą, šalį).vardas, miestas = IŠIMTAS.miestas;
Pakeitimai parodyti žemiau.
>> PASIRINKTI * IŠ asmens;
Išvada
Šis straipsnis parodė, kaip naudoti „PostgreSQL“ Upsert “su sąlyga ON CONFLICT, kartu su„ DO and DO NOTHING “veiksmais. Perskaitę šį straipsnį, tikimės, kad jums bus lengviau suprasti, kaip naudotis „PostgreSQL 'Upsert“."