"Underwater Stones" DML tim za ažuriranje za MySQL

Svaki programer koji je morao raditi s bazama podataka naišao je na DML operatore (jezik za obradu podataka) kao što su Select, Insert, Delete i Update. Okruženje MySQL također koristi sve gore navedene naredbe u svom arsenalu. Ti operatori logično govore o svom odredištu - odabiru zapisa, umetanju novih vrijednosti, ažuriranju postojećih podataka, punom, ili prema određenim uvjetima, uklanjanju informacija u bazi podataka. Teoretski materijali obuke detaljno opisuju princip rada svakog tima i njihovu sintaksu, ali nigdje se ne može spomenuti poteškoće koje se mogu pojaviti u praksi kada se koriste. Ovaj materijal će biti posvećen razmatranju nekih od njih.


Ukratko o DML operatorima (Insert)

Prije nastavka, potrebno je još jednom detaljno podsjetiti na svrhu svake funkcije. Više će nas zanimati dva operatera: Insert i Update, budući da su to glavne poteškoće u obradi velikih količina podataka.
Počnite s naredbom Insert, a zatim idite glatko na Update. MySQL, kao i svaka druga moderna DBMS, koristi operaciju Insert za dodavanje novih unosa u postojeće tablice baze podataka. Sintaksa operacije je vrlo jednostavna i razumljiva. Sadrži popis polja u koja će se unijeti vrijednost, odredište - naziv tablice i popis podataka koji se unose izravno. Svaki put kad se izvrši naredba Umetni, baza podataka će bitidopunjena novim vrijednostima.


Operator ažuriranja

Međutim, u praksi se često događaju situacije u kojima neki skup podataka treba ažurirati na jednu ili više vrijednosti atributa. Primjerice, može se navesti situacija u kojoj tvrtka prolazi kroz reformu s naknadnim preimenovanjem glavnih odjela. U tom slučaju morate napraviti promjene za svaki odjel. Ako se samo imena promijene, problem se rješava vrlo brzo. Ali ako se kodiranje svake komponente cjelokupne proizvodnje, koja obično služi kao primarni ključ, mijenja, onda to, zauzvrat, uzrokuje promjene u informacijama i na svakom zaposleniku.
Ažuriranje DML operatora može se koristiti za rješavanje ovog problema. MySQL je poslužitelj koji radi s velikim brojem zapisa, koristeći operatora ažuriranja, izvršit će traženi upit i riješiti problem. Ali ponekad tijekom nadogradnje ne postoje sasvim razumljive i teško razumljive složenosti. Radi se o poteškoćama u ažuriranju zapisa, jezik će se nastaviti.

Što je rečeno u teoriji

Naredba Update, kao što je gore spomenuto, koristi se za ažuriranje postojećih unosa u tablici. Ali u praksi, klijenti koji pristupaju poslužiteljima baze podataka nisu uvijek svjesni postoji li određeni skup podataka u tablicama ili ne. Preliminarna provjera dostupnosti podataka u bazi podataka za daljnje osvježavanje dovodi do vremenskih troškova i gubitka mogućnosti poslužitelja. Da bi se to spriječilo, DBMS ima poseban dizajn MySQL - Insert * Update, ukoji se umetanje ili ažuriranje može izvesti neovisno jedan o drugom. To jest, kada postoji zapis u tablici za određeno stanje, dogodit će se ažuriranje. Ako se podaci pod ovim uvjetom ne pronađu, MySQL poslužitelj će moći dovršiti zahtjev za podacima.

Ažuriranje podataka u prisutnosti duplikata

Važna komponenta takvih upita - zahtjeva u MySQL sustavu za upravljanje bazom podataka - prefiks "On Duplicate Key Update". Potpuna sintaksa upita izgleda ovako: "umetnite u test_table (employer_id, name) vrijednosti (1'Abramov ') je duplicirano ažuriranje ključa last_modified = NOW (); ”.
Takav se zahtjev može koristiti za bilježenje radnji zaposlenika, na primjer, određivanje vremena sjecišta tranzitnog poduzeća s naknadnim izračunom vremena prekida i otkrivanja kašnjenja. Kako ne bismo uključili nekoliko zapisa u tablicu, dovoljno je da svaki zaposlenik vodi račun uz stalno ažuriranje. To je dizajn duplikata koji vam omogućuje da to učinite.

Zapravo o problemima

S obzirom na gore navedeni primjer registriranja radnji zaposlenika na prolazu, kao problem, možemo koristiti polja auto_ inkrementa koja se obično koriste za popunjavanje vrijednosti primarnih ključeva (primarni ključ). Kada koristite naredbu MySQL Update u konstruktu s Insert auto_ inkrement, polja se stalno povećavaju. Isto tako, sve se događa kada se koristi zamjenski dizajn, ako se otkriju duplikati. "Auto-inkrementalna" vrijednost se povećava čak i kada za to nema potrebe. Zbog toga postoje problemi s propusnicomvrijednosti ili prelijevanje raspona, što u budućnosti dovodi do prekida u radu sustava za upravljanje bazama podataka.

Najveća vjerojatnost problema

Web-programeri bi trebali uzeti u obzir problem koji se najčešće koristi u višekorisničkim sustavima (internetske stranice, portali itd.) Kada sustav izvodi veliki broj Insert i Update MySQL procedura.
PHP-pristup bazi podataka obavlja se vrlo često. Stoga je postizanje maksimalnih vrijednosti polja, uzrokovanih auto_inkrementom, brze, a pri analizi poteškoća nije moguće odmah utvrditi uzroke.
Stoga se preporučuje da programeri pažljivo pristupaju korištenju dizajna duplikata ključa u mysql naredbi ažuriranja. select - zahtjevi prilikom pristupa poslužitelju baze podataka će raditi bez grešaka, ali dodavanje novih unosa u bazu podataka ugroženo je neugodnim situacijama, što dalje vodi do ozbiljnih problema. Kao alternativa, preporuča se da polja auto-inkrementa prvo provjere dostupnost zapisa za njih, a zatim ih ažurirate.

Povezane publikacije

Zašto World of Tanks nije ažuriran? Rješenje problema