PostgreSQL

PostgreSQL dodatak o sukobu

PostgreSQL dodatak o sukobu
Izraz 'Upsert' prepoznat je kao spajanje u RDBMS-u. 'Upsert' je korisno imati s PostgreSQL-om ako se ne želite baviti jedinstvenim greškama zbog kršenja ograničenja zbog ponovljenih unosa. Kada pokrenete generičku UPDATE naredbu, potrebne prilagodbe dogodit će se samo ako zapis odgovara standardima naredbe; ako takvi podaci ne postoje, tada se ništa ne događa. Kada u tablicu dodate novi redak, PostgreSQL će ga ažurirati ako je postojao ranije, ili će ugraditi novi redak ako redak nije postojao. SQL ključna riječ 'Upsert' kombinira riječi "ažuriranje" i "umetanje".”Ovaj vam članak pokazuje kako funkcionira značajka PostgreSQL 'Upsert', kao i kako koristiti značajku 'Upsert' za dodavanje ili ažuriranje podataka ako umetnuti redak već postoji u tablici.

Sintaksa

Slijedi sintaksa upita 'Upsert' ON CONFLICT.

>> INSERT INTO ime_tablice (popis_kolona) VALUSE (value_list) U KONFLIKTU ciljna akcija;

Pokrenite ljusku naredbenog retka PostgreSQL

Za početak pokrenite ljusku naredbenog retka PostgreSQL iz izbornika Programi. Spojite ga na potreban poslužitelj. Unesite ime baze podataka na kojem želite raditi. Da biste radili na drugoj luci, upišite broj porta i korisničko ime s kojim želite raditi. Da biste nastavili sa zadanim parametrima, ostavite razmake takvi kakvi jesu i pritisnite "Enter" kod svake opcije. Dodajte lozinku za odabrano korisničko ime i vaša naredbena ljuska trebala bi biti spremna za upotrebu.

Primjer 1:

Sada možemo započeti s sukobom "Upsert". Pretpostavimo da u odabranoj bazi podataka imate tablicu s nazivom "osoba" s nekim poljima koja prikazuju zapise različitih osoba. Ti zapisi pokazuju imena ljudi, njihove dobi i njihove gradove i države. Tablica je prikazana u nastavku.

>> ODABERI * OD osobe;

Važno je znati kako može doći do pogreške ili sukoba. Polje tablice 'id', koje je ujedno i primarni ključ, sadrži vrijednosti od 1 do 15. Kad korisnik pokuša umetnuti neke duplikate zapisa u tablicu, dolazi do sukoba.

Pokušajmo sa sljedećom INSERT izjavom, umetajući zapise u tablicu 'osoba'. Ovaj će upit uzrokovati pogrešku jer vrijednost '3' polja 'id' već postoji u tablici.

>> INSERT INTO person (id, name, age, city, country) VRIJEDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Primjer 2: Podmetanje s klauzulom ON CONFLICT

Koristit ćemo klauzulu ON CONFLICT kako bismo izbjegli INSERT upit koji uzrokuje ovu pogrešku zbog umetanja dvostrukih zapisa. Naredba ON CONFLICT donosi dvije fraze s različitim načinima korištenja.

Primjer 3: Podmetanje s klauzulom NE NIŠTA

U ovom ćemo primjeru pogledati klauzulu DO NOTHING. Ova klauzula objašnjava da se neće izvršiti nikakva operacija u slučaju pogreške ili sukoba. Drugim riječima, ova klauzula samo će izbjeći sukob ili pogrešku.

Pa, isprobajmo istu naredbu INSERT koju smo ranije koristili za dodavanje dvostrukih zapisa u tablicu 'osoba', uz nekoliko dodanih promjena. Dodali smo klauzulu ON CONFLICT, zajedno s izjavom DO NOTHING u ovoj klauzuli. Klauzula ON CONFLICT primijenjena je na jedinstveni stupac 'id'. To znači da će, kada korisnik pokuša umetnuti duplikat vrijednosti u stupac 'id', izbjeći sukob i ne poduzimati ništa. Kao što vidite na donjoj slici, novi zapis neće ni umetnuti u tablicu, niti će ažurirati prethodni zapis.

>> INSERT INTO person (id, name, age, city, country) VRIJEDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') O SUKOBU (id) NEMOJTE NIŠTA;

Ponovno provjerimo tablicu 'osoba' radi autentičnosti. Kao što možete vidjeti na donjoj slici, na tablici nisu izvršene promjene.

>> ODABERI * OD osobe;

Primjer 2: Upotrijebite klauzulu DO

Dalje ćemo pogledati klauzule ON CONFLICT i DO. Kao što mu samo ime govori, klauzula ___ izvest će radnju u slučaju pogreške ili sukoba kada se u tablicu umetne dvostruka vrijednost. Upotrijebit ćemo istu naredbu za umetanje koju smo prethodno koristili za umetanje dvostrukog zapisa u tablicu 'osoba', s manjom izmjenom. Dodali smo klauzulu ON CONFLICT s klauzulom DO unutar nje. Kada korisnik pokuša umetnuti nejedinstvenu vrijednost u stupac 'id', izvršit će akciju kako bi izbjegao sukob. Koristili smo klauzulu UPDATE nakon klauzule DO, koja označava ažuriranje podataka u tablici 'osoba'. Ključna riječ SET koristi se za postavljanje vrijednosti stupca 'name' na novu vrijednost, 'Habib', pomoću ključne riječi ISKLJUČENO gdje je 'id' trenutno '3'. Ako izvršite sljedeći upit, vidjet ćete da je upit izveden.

>> INSERT INTO person (id, name, age, city, country) VRIJEDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') O KONFLIKTU (id) DO AŽURIRANIH SET name = ISKLJUČENO.Ime;

Moraju se dohvatiti zapisi tablice 'osoba' da bi se vidjele promjene gornjeg upita. Ako izvršite sljedeći upit u ljusci naredbenog retka, trebali biste vidjeti sljedeći izlaz.

>> ODABERI * OD osobe;

Kao što možete vidjeti iz donjeg rezultata, ime osobe je ažurirano na "Habib", gdje je "id" 3.'

Također možete ažurirati zapise u više stupaca pomoću ključne riječi EXCLUDED u klauzuli ON CONFLICT upita INSERT, kao što je prikazano u nastavku.

>> INSERT INTO person (id, name, age, city, country) VRIJEDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') O KONFLIKTU (id) DO AŽURIRANIH SET name = ISKLJUČENO.ime, grad = ISKLJUČENO.Grad;

Promjene su prikazane u nastavku.

>> ODABERI * OD osobe;

Zaključak

Ovaj vam je članak pokazao kako koristiti PostgreSQL 'Upsert' s klauzulom ON CONFLICT, zajedno s radnjama DO i DO NOTHING. Nakon čitanja ovog članka, nadamo se da ćete lakše razumjeti kako se koristi PostgreSQL 'Upsert.'

Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...
0 A.D. Vodič
Od mnogih strateških igara tamo, 0 A.D. uspijeva se istaknuti kao sveobuhvatan naslov i vrlo duboka, taktička igra unatoč tome što je otvoren izvor. R...
Vodič za Unity3D
Uvod u Unity 3D Unity 3D moćan je motor za razvoj igara. Cross platforma je to što vam omogućuje stvaranje igara za mobilne uređaje, web, stolne račun...