"Capcane" din comanda DML Update MySQL
Fiecare programator care a trebuit să lucreze cu baze de date cu care se confruntă operatorii de DML (per. din engleză - "limbaj de manipulare a datelor"), cum ar fi selecta, Inserare, șterge și Actualizare. Mediul MySQL utilizează, de asemenea, toate comenzile de mai sus în arsenalul său.
Acești operatori vorbesc logic despre eiscopul este de a selecta înregistrări, de a introduce noi valori, de a actualiza datele existente, de a completa sau, în condițiile specificate, ștergeți informațiile din baza de date. Materialele de formare teoretică descriu în detaliu principiul de funcționare a fiecărei echipe și sintaxa lor, însă nu se menționează nicăieri dificultățile care pot apărea în practică în timpul utilizării. Acest material va fi dedicat examinării unora dintre ele.
Pe scurt despre operatorii DML (Insert)
Înainte de a continua, este necesar să reamintim încă o dată în detaliu despre scopul fiecărei funcții. Vom fi mai interesați de doi operatori: Inserare și Actualizare, deoarece din ele apar principalele dificultăți atunci când se prelucrează cantități mari de date.
Începeți cu o echipă Inserare, și apoi du-te ușor la Actualizare. MySQL sistemul, ca orice alt DBMS modern, utilizează operația Inserare pentru a adăuga intrări noi la existentetabele de baze de date. Sintaxa acestei operațiuni este foarte simplă și simplă. Acesta conține o listă cu câmpurile în care vor fi introduse valorile, destinația - numele tabelului - și lista de date de intrare direct. Cu fiecare comandă Inserare Baza de date va fi actualizată cu valori noi.
Actualizați operatorul
Cu toate acestea, în practică destul de dessituații care pentru un anumit set de date trebuie să actualizați una sau mai multe valori de atribute. De exemplu, putem menționa situația în care întreprinderea a suferit o reformă cu redenumirea în continuare a principalelor departamente. În acest caz, este necesar să se facă schimbări pentru fiecare departament. Dacă se modifică numai numele, problema este rezolvată foarte rapid. Dar, dacă se modifică codificarea fiecărei componente a întregii producții, care, de regulă, servește drept cheie primară, aceasta, la rândul său, duce la schimbări în informație și pentru fiecare angajat.
Pentru a rezolva problema în cauză pot fi aplicate Operatorul DML - Actualizare. MySQL-server, care funcționează cu un număr mare de înregistrări,cu ajutorul operatorului de actualizare, va îndeplini solicitarea solicitată și va rezolva problema. Dar, uneori, în timpul actualizării nu există dificultăți destul de clare și dificil de explicat. Este vorba despre ceea ce complexitatea înregistrărilor de actualizare vor fi discutate mai jos.
Ce puțin se spune în teorie ...
Actualizați comanda, după cum sa menționat mai susutilizat pentru actualizarea intrărilor existente în tabel. Dar, în practică, clienții care accesează serverele de baze de date nu știu întotdeauna dacă există sau nu un anumit set de date în tabele. O verificare preliminară a disponibilității datelor în baza de date pentru o actualizare ulterioară conduce la consumarea de timp și la pierderea funcțiilor serverului.
Pentru a preveni acest lucru, în DBMS este prevăzut un design special. MySQL - Introduceți * Actualizareîn care o inserare sau o actualizare poateexecutați independent unul de celălalt. Adică atunci când există o intrare în tabel pentru o anumită condiție, va apărea o actualizare. Dacă nu s-au găsit date pentru starea în cauză, serverul MySQL va putea executa cererea de adăugare de date.
Actualizați datele cu duplicate
O componentă importantă a acestui lucru Inserare-interogare în sistemul de gestionare a bazelor de date MySQL - "Despre actualizarea cheii duplicate" console. Sintaxa completă a interogării este după cum urmează: "introduceți în valorile test_table (employer_id, name) (1, "Abramov") pe actualizarea duplicat cheie last_modified = NOW ();“.
O astfel de cerere poate fi folosită pentruacțiunile de înregistrare ale angajaților, de exemplu, determinarea timpului de intersecție a trecerii întreprinderii cu calcularea ulterioară a timpului de întrerupere și detectarea întârzierilor. Pentru a nu face mai multe intrări în tabel, este suficient să păstrați înregistrări pentru fiecare angajat cu o actualizare constantă. Acesta este proiectul de verificare duplicat care permite acest lucru.
De fapt, despre problemele ...
Având în vedere exemplul de mai sus cu privire la înregistrarea acțiunilor angajaților la punctul de control, se poate menționa utilizarea autoprezentării (auto_creștere) care sunt utilizate în mod obișnuit pentru a popula valorile cheilor primare (primar_cheie). Când utilizați comanda Actualizare MySQL în construcții cu Inserare auto_creștere, câmpurile sunt în continuă creștere.
În mod similar, totul se întâmplă cânddesignul de înlocuire este utilizat în cazul detectării duplicatului. Valoarea "incrementului automat" crește chiar și atunci când nu este necesară. Din acest motiv, există probleme de valori lipsă sau de depășire a intervalului, ceea ce duce ulterior la încălcarea performanțelor sistemelor de gestionare a bazelor de date.
Cea mai mare probabilitate a unei probleme
Problema descrisă trebuie luată în considerare web- dezvoltatori, așa cum este cel mai frecvent în sistemele multi-utilizator (site-uri internet, portaluri etc.), atunci când se efectuează un număr mare de proceduri în sistem Inserare și Actualizați MySQL.
PHP-apelurile către baza de date sunt efectuate foarte des. Prin urmare, valoarea maximă a câmpurilor definite ca auto_increment, se întâmplă rapid și, analizând dificultățile care au apărut, este imposibil să se stabilească cauzele imediat.
Prin urmare, dezvoltatorii sunt sfătuiți să ia în considerare cu atenție utilizarea designului. pe cheia duplicat în echipă actualizare mysql. selectați - solicită atunci când accesează serverul bazei de dateacestea vor funcționa fără erori, dar adăugarea de noi înregistrări în baza de date este plină de situații neplăcute, ceea ce duce ulterior la probleme serioase. Ca alternativă, se recomandă ca câmpurile cu incrementare automată să verifice inițial înregistrările pentru acestea și apoi să le actualizeze.