..


Link-uri sponsorizate

Interogări mai puţin cu INSERT ... ON UPDATE CHEIE DUPLICAT

Articol scris de Max Bossi

Şi "bine-cunoscut faptul că o gestionare corectă interogare este o condiţie prealabilă pentru punerea în aplicare stabil şi eficient.
În acest articol vom prezenta o sintaxă puţin cunoscut, dar extrem de puternic, eu vorbesc despre clauza ON DUPLICAT UPDATE CHEIE.

Această clauză este utilizat în timpul o declaraţie INSERT şi scopul său este de a verifica, inainte de inserare, există o duplicare de o cheie primară (cheie primară) sau o cheie unica (UNIQUE KEY), şi dacă acest lucru se întâmplă motor un'UPDATE MySQL va insera în schimb.

Avantajul acestei clauze este clar: va scrie o singură interogare în loc de două, cu avantaje în termeni de performanţă şi codul de curatare.

Să luăm un exemplu. Să presupunem că vrem să facem un script simplu care efectuează înregistrarea de vizitatori pe site-ul nostru. De mai jos structura tabelului de PB noastre:

  • IP (cheie)
  • numero_visite
  • ultima_visita
Din dorinta de a înregistra fiecare IP în tranzit pe paginile noastre avem, în conformitate cu logica de obicei, face o verificare SELECT preliminară că IP nu este deja în PB şi numai în cazul în care răspunsul este negativ (nu IP prezent) pentru a interoga INSERT.

Datorită INSERT sintaxa ... ON UPDATE CHEIE DUPLICAT ... putem obţine acelaşi rezultat cu o singură interogare:

 



 INSERT INTO VALORI ip_visitatori ('123 .123.123.123 ', 1, NOW ())

 





 LA CHEIE DPLICATE







 UPDATE numero_visite numero_visite = + 1, ultima_visita = NOW ();

 
Astfel, în cazul în care IP este includerea în care se face, în caz contrar aveţi o actualizare simplă a înregistrării afectate. Folosind această sintaxă permite pentru a obţine un beneficiu în termeni de performanţă egală cu 30%.

Cu imaginatie un pic "şi ingeniozitate a clauzei în cauză nu poate fi foarte util în diferite circumstanţe.
De exemplu, putem folosi in combinatie cu o condiţie. Iată un exemplu: Să presupunem că aveţi un tabel de un site de licitaţii on-line ipotetic structurată după cum urmează:

  • ID_asta
  • migliore_offerta
Să presupunem că doriţi să continuaţi cu plasarea de o noua oferta, în cazul în care licitaţia a oferit deja acolo va fi un upgrade simplu, dar numai în cazul în care oferta este mai mare decât cel deja acolo:
 



 Oferte INSERT INTO VALORI (1, 120)

 





 LA CHEIE DPLICATE







 UPDATE migliore_offerta = IF (VALORI (migliore_offerta) <120, 120, VALORI (migliore_offerta))

 
Printr-o interogare simplă am rezolvat într-o singură lovitură ... În caz contrar, am fi avut de a utiliza mai multe interogări cu o risipă de resurse în consecinţă (şi un risc mai mare de erori).

În aceeaşi categorie ...
E-Learning
MS Access (Avansat) MS Access (Avansat)
Aflaţi cum să creaţi şi să gestionaţi baze de date rapid şi uşor. Incepand de la 29 €.
MySQL (Curs) MySQL (Curs)
De gestionare a bazei de date open-source. De la 39 €.
SQL si baze de date (Curs) SQL si baze de date (Curs)
Crearea şi gestionarea bazelor de date relaţionale. De la 39 €.
Link-uri sponsorizate