..


Sponsrade länkar

Mindre frågor med INSERT ... OM DUBBLETT KEY UPDATE

Artikel skriven av Max Bossi

Och "väl känt att en korrekt fråga förvaltning är en förutsättning för stabil och effektiv implementering.
I denna artikel kommer vi att presentera en föga känd men mycket kraftfull syntax, jag talar om för dubblerat KEY UPDATE klausul.

Denna klausul används under en INSERT-sats och dess syfte är att verifiera, före insättning, finns det en dubblering av en primärnyckel (primärnyckel) eller en unik nyckel (unik nyckel), och om detta händer motorn un'UPDATE MySQL kommer istället in.

Fördelen med denna klausul är klar: du skriver en enda fråga i stället för två med fördelar vad gäller prestanda och kod sanering.

Låt oss ta ett exempel. Antag att vi vill göra ett enkelt skript som utför loggning av besökare på vår webbplats. Under tabellen strukturen i vår DB:

  • IP (knapp)
  • numero_visite
  • ultima_visita
Att vilja spela in varje IP i transit på våra sidor vi har, enligt de vanliga logik, gör en SELECT första preliminär kontrollera att IP inte redan finns i DB och endast om svaret är negativt (IP ej närvarande) för att fråga INSERT.

Tack vare den syntax INSERT ... ON DUPLICATE KEY UPDATE ... vi kan uppnå samma resultat med en enda fråga:

 



 INSERT INTO ip_visitatori VALUES ('123 .123.123.123 ', 1, NU ())

 





 PÅ DE VIKTIGASTE DPLICATE







 UPPDATERING numero_visite numero_visite = + 1, ultima_visita = NU ();

 
Således, om IP är införandet görs, annars kan du köra en enkel uppdatering av de drabbade posten. Genom att använda denna syntax gör det möjligt att få en förmån i form av prestanda på 30%.

Med lite fantasi och uppfinningsrikedom av klausulen i fråga kan det vara mycket användbart i olika omständigheter.
Till exempel kan vi använda det i kombination med ett villkor. Här är ett exempel: Anta att du har en tabell med en hypotetisk auktionswebbplats struktureras enligt följande:

  • ID_asta
  • migliore_offerta
Anta att du vill fortsätta med placeringen av ett nytt erbjudande, om auktionen har redan erbjudit det kommer att bli en enkel uppgradering, men bara om erbjudandet är högre än det som redan finns där:
 



 Erbjuder INSERT INTO värden (1, 120)

 





 PÅ DE VIKTIGASTE DPLICATE







 UPPDATERING migliore_offerta = OM (värden (migliore_offerta) <120, 120, VALUES (migliore_offerta))

 
Genom en enkel fråga vi löste i ett svep ... Annars skulle vi varit tvungna att använda flera frågor med åtföljande slöseri med resurser (och en större risk för fel).

I samma kategori ...
E-Learning
MS Access (avancerat) MS Access (avancerat)
Lär dig skapa och hantera databaser snabbt och enkelt. Från 29 €.
MySQL (kurs) MySQL (kurs)
Hantering av öppen källkod databas. Från 39 €.
SQL och databas (kurs) SQL och databas (kurs)
Skapa och hantera relationsdatabaser. Från 39 €.
Sponsrade länkar