Syntaksi
Seuraava on Upsert ON CONFLICT -kyselyn syntaksi.
>> INSERT INTO taulukon_nimi (sarake_lista) VALUSE (arvo_luettelo) ON ristiriitainen kohdetoiminto;Käynnistä PostgreSQL-komentorivin kuori
Aloita käynnistämällä PostgreSQL-komentorivikuori Sovellus-valikosta. Yhdistä se tarvittavaan palvelimeen. Kirjoita tietokannan nimi, jota haluat käyttää. Jos haluat työskennellä toisessa portissa, kirjoita portin numero ja käyttäjänimi, jota haluat käyttää. Jatka oletusparametreja jättämällä välilyönnit sellaisenaan ja painamalla Enter-näppäintä jokaisessa vaihtoehdossa. Lisää salasana valitulle käyttäjänimelle, ja komentojonesi tulee olla käyttövalmis.
Esimerkki 1:
Nyt voimme aloittaa Upsertin kanssa ristiriidassa. Oletetaan, että valitussa tietokannassa on taulukko nimeltä "henkilö", jossa on joitain kenttiä, jotka näyttävät eri henkilöiden tietueita. Nämä muistiinpanot osoittavat ihmisten nimet, heidän ikänsä ja kaupunkinsa ja maat. Taulukko näkyy alla.
>> VALITSE * FROM henkilö;
On tärkeää tietää, miten virhe tai ristiriita voi syntyä. Taulukko "id", joka on myös ensisijainen avain, sisältää arvot 1-15. Kun käyttäjä yrittää lisätä taulukkoon kaksoiskappaleita, ristiriita ilmenee.
Kokeile seuraavaa INSERT-käskyä lisäämällä tietueet henkilö-taulukkoon. Tämä kysely aiheuttaa virheen, koska id-kentän arvo '3' on jo taulukossa.
>> LISÄÄ henkilö (tunnus, nimi, ikä, kaupunki, maa) ARVOT ('3', 'Habib', '45', 'Chakwal', 'Pakistan');
Esimerkki 2: Korjaa ON CONFLICT -lausekkeella
Käytämme ON CONFLICT -lauseketta välttämään INSERT-kyselyn, joka aiheuttaa tämän virheen kopioiden lisäämisen vuoksi. ON CONFLICT -komennossa on kaksi eri käyttötarkoitusta ilmaisua.
- TEHDÄ: Suorita operaatioita konfliktin voittamiseksi.
- ÄLÄ TEE MITÄÄN: Vältä konfliktia tekemättä mitään.
Esimerkki 3: Käännä ÄLÄ MITÄÄN lauseke
Tässä esimerkissä tarkastellaan ÄLÄ MITÄÄN lausetta. Tässä lausekkeessa täsmennetään, että mitään virhettä tai ristiriitaa ei suoriteta. Toisin sanoen tämä lause estää vain ristiriidat tai virheet.
Yritetään siis samaa INSERT-komentoa, jota käytimme aiemmin lisäämällä päällekkäisiä tietueita 'henkilö' -taulukkoon muutamalla muutoksella. Olemme lisänneet ON CONFLICT -lausekkeen yhdessä DO NOTHING -lausekkeen kanssa tähän lausekkeeseen. ON CONFLICT -lauseketta on sovellettu yksilölliseen id-sarakkeeseen. Tämä tarkoittaa, että kun käyttäjä yrittää lisätä kaksoisarvon id-sarakkeeseen, se välttää ristiriidan ja ei tee mitään. Kuten alla olevasta kuvasta näet, se ei edes lisää uutta tietuetta taulukkoon eikä päivitä edellistä tietuetta.
>> LISÄÄ henkilö (tunnus, nimi, ikä, kaupunki, maa) ARVOT ('3', 'Habib', '45', 'Chakwal', 'Pakistan') Ristiriitaisuuteen (id) EI tee mitään;
Tarkistetaan 'henkilö' -taulukko uudelleen aitouden vuoksi. Kuten alla olevasta kuvasta näet, taulukkoon ei ole tehty muutoksia.
>> VALITSE * FROM henkilö;
Esimerkki 2: Korjaa DO-lauseella
Seuraavaksi tarkastellaan ON CONFLICT- ja DO -lausekkeita. Kuten nimestään käy ilmi, lauseke ___ suorittaa virheen tai ristiriidan, kun kaksoisarvo lisätään taulukkoon. Käytämme samaa insert-komentoa, jota käytimme aiemmin lisäämällä kaksoiskappale tietueeseen 'henkilö' -taulukko, pienillä muutoksilla. Olemme lisänneet ON CONFLICT -lausekkeen, jonka sisällä on DO-lauseke. Kun käyttäjä yrittää lisätä ei-yksilöllisen arvon id-sarakkeeseen, se suorittaa toimenpiteen ristiriidan välttämiseksi. Olemme käyttäneet DOD-lausekkeen jälkeen UPDATE-lauseketta, joka osoittaa päivityksen henkilö-taulukon tietoihin. SET-avainsanaa käytetään määrittämään nimi-sarakkeen arvoksi uusi arvo, Habib, käyttämällä avainsanaa EXCLUDED, jossa 'id' on '3' kulloinkin. Jos suoritat seuraavan kyselyn, huomaat, että kysely on suoritettu.
>> LISÄÄ henkilö (tunnus, nimi, ikä, kaupunki, maa) ARVOT ('3', 'Habib', '45', 'Chakwal', 'Pakistan') Ristiriitaisuuteen (id) TEE PÄIVITÄ ASETUKSEN nimi = EI SULJETTU.nimi;
Henkilötaulukon tietueet on haettava, jotta näet yllä olevan kyselyn muutokset. Jos suoritat seuraavan kyselyn komentorivin kuoressa, sinun pitäisi nähdä seuraava tulos.
>> VALITSE * FROM henkilö;Kuten alla olevasta lähdöstä näet, henkilön nimi on päivitetty nimeksi 'Habib', jossa 'id' on '3.'
Voit myös päivittää tietueet useammassa kuin yhdessä sarakkeessa käyttämällä INSERT-kyselyn ON CONFLICT -lausekkeen EXCLUDED-avainsanaa alla olevan kuvan mukaisesti.
>> LISÄÄ henkilö (tunnus, nimi, ikä, kaupunki, maa) ARVOT ('3', 'Habib', '45', 'Chakwal', 'Pakistan') Ristiriitaisuuteen (id) TEE PÄIVITÄ ASETUKSEN nimi = EI SULJETTU.nimi, kaupunki = SULJETTU.kaupunki;
Muutokset on esitetty alla.
>> VALITSE * FROM henkilö;
Johtopäätös
Tässä artikkelissa kerrotaan, miten PostgreSQL 'Upsert' -ohjelmaa käytetään ON CONFLICT -lausekkeen kanssa DO ja DO NOTHING -toimintojen kanssa. Tämän artikkelin lukemisen jälkeen toivomme, että sinun on helpompi ymmärtää, miten PostgreSQL 'Upsert -ohjelmaa käytetään.'