"Podvodni kamni" DML posodobitvena ekipa za MySQL

Vsak programer, ki je moral delati z bazami podatkov, je naletel na operaterje DML (jezik za obdelavo podatkov), kot so Izbira, Vstavi, Izbriši in Posodobi. Okolje MySQL uporablja tudi vse zgoraj navedene ukaze v svojem arzenalu. Ti operaterji logično govorijo o svojem namembnem kraju - izbiri zapisov, vstavljanju novih vrednosti, posodabljanju obstoječih podatkov, popolni ali v skladu z določenimi pogoji odstranitev podatkov v bazi podatkov. Teoretični materiali usposabljanja podrobno opisujejo načelo dela vsake skupine in njihovo sintakso, vendar ni nikjer mogoče omeniti težav, ki se lahko pojavijo v praksi, kadar se uporabljajo. Gradivo bo namenjeno obravnavi nekaterih izmed njih.


Na kratko o operaterjih DML (Vstavi)

Pred nadaljevanjem je treba še enkrat podrobno opozoriti na namen vsake funkcije. Bolj se bomo zanimali za dva operaterja: Insert in Update, saj sta glavni težavi pri obdelavi velikih količin podatkov.
Začnite z ukazom Vstavi in ​​nato nemoteno preidite na Posodobitev. MySQL, tako kot vsi drugi moderni DBMS, uporablja operacijo Insert za dodajanje novih vnosov v obstoječe tabele zbirke podatkov. Sintaksa operacije je zelo preprosta in razumljiva. Vsebuje seznam polj, kjer bo vnesena vrednost, cilj - ime tabele - in seznam neposredno vnesenih podatkov. Vsakič, ko se izvede ukaz Vstavi, bo baza podatkovdopolnjene z novimi vrednotami.


Operator posodobitve

Vendar se v praksi pogosto pojavijo situacije, da je treba nekatere podatkovne nize posodobiti na eno ali več vrednosti atributov. Kot primer lahko navedemo situacijo, ko se podjetje preoblikuje z naslednjim preimenovanjem glavnih oddelkov. V tem primeru morate narediti spremembe za vsak oddelek. Če se spremenijo samo imena, se problem hitro reši. Če pa se kodiranje vsake komponente celotne proizvodnje, ki običajno služi kot primarni ključ, spremeni, potem to povzroči spremembe informacij in vsakega zaposlenega.
Za rešitev tega problema se lahko uporabi posodobitev operaterja DML. MySQL je strežnik, ki deluje z velikim številom zapisov, z uporabo operaterja posodobitve, bo izvedel zahtevano poizvedbo in rešil problem. Toda včasih med nadgradnjo ni dovolj razumljivih in težko razumljivih zapletenosti. Gre za težavo posodabljanja zapisov, jezik se bo nadaljeval.

Kaj je navedeno v teoriji

Ukaz Update, kot je omenjeno zgoraj, se uporablja za posodobitev obstoječih vnosov v tabeli. V praksi pa stranke, ki dostopajo do strežnikov baz podatkov, ne vedo vedno, ali obstaja v tabelah določen nabor podatkov ali ne. Predhodno preverjanje razpoložljivosti podatkov v podatkovni bazi za nadaljnje osveževanje vodi v časovne stroške in izgubo zmogljivosti strežnika. Da bi to preprečili, ima DBMS posebno obliko MySQL - Insert * Update, vvstavljanje ali posodabljanje se lahko izvede neodvisno drug od drugega. To pomeni, da če je v tabeli zapis za določen pogoj, bo prišlo do posodobitve. Če podatkov pod tem pogojem ne najdete, bo strežnik MySQL lahko izpolnil zahtevo po podatkih.

Posodabljanje podatkov ob prisotnosti dvojnikov

Pomembna sestavina takih zahtevkov za vstavljanje v sistemu za upravljanje podatkovne zbirke MySQL - predpona "On Duplicate Key Update". Celotna sintaksa poizvedbe izgleda takole: "vstavite v vrednosti test_table (employer_id, name) (1'Abramov ') je podvojena posodobitev ključa last_modified = NOW (); »
Takšna zahteva se lahko uporabi za beleženje dejanj delavcev, na primer za določitev časa presečišča tranzitnega podjetja z naknadnim izračunom časa prekinitve in odkritja zamud. Da ne bi v tabelo vključili nekaj zapisov, je dovolj, da vsak zaposleni vodi račun s stalnim posodabljanjem. To je zasnova dvojnega preverjanja, ki vam omogoča, da to storite.

Pravzaprav o težavah

Glede na zgornji primer registracije dejanj zaposlenih v prehodu, kot problem, lahko uporabimo polja auto_ inkrementa, ki se običajno uporabljajo za zapolnitev vrednosti primarnih ključev (primarni ključ). Pri uporabi ukaza MySQL Update v konstruktu z vstavljanjem auto_ inkrementa se polja stalno povečujejo. Podobno se vse zgodi, če se uporabi nadomestna zasnova, če so zaznani dvojniki. "Auto-inkrementalna" vrednost se poveča, tudi če ni potrebna. Zaradi tega obstajajo težave s prepustnicovrednosti ali prelivanja razpona, kar v prihodnosti vodi do motenj v delovanju sistemov za upravljanje baz podatkov.

Največja verjetnost problema

Težavo bi morali upoštevati spletni razvijalci, saj se najpogosteje uporablja v večuporabniških sistemih (internetne strani, portali itd.), Ko sistem izvede veliko število postopkov vstavljanja in posodabljanja MySQL.
PHP-dostop do podatkovne baze se izvaja zelo pogosto. Zato je doseganje maksimalnih vrednosti polj, ki jih povzroča auto_increment, hitro, pri analizi težav pa ni mogoče takoj ugotoviti vzrokov.
Zato je priporočljivo, da razvijalci skrbno pristopijo k uporabi oblikovanja podvojenih ključev v ukazu mysql update. select - zahtevki pri dostopanju do strežnika baz podatkov bodo delovali brez napak, vendar je dodajanje novih vnosov v bazo podatkov ogroženo zaradi neprijetnih situacij, kar še vodi do resnih težav. Alternativno je priporočljivo, da polja za samodejno povečevanje najprej preverijo razpoložljivost zapisov za njih in jih nato posodobite.

Sorodne publikacije