..


Liens sponsorisés

Moins de requêtes avec INSERT ... SUR DUPLICATE KEY UPDATE

Article écrit par Max Bossi

Et «bien connu que d'une gestion correcte de requête est un préalable à la mise en œuvre stable et efficace.
Dans cet article nous allons présenter une syntaxe peu connu mais très puissant, je parle de la clause ON DUPLICATE KEY UPDATE.

Cette clause est utilisée pendant une instruction INSERT et son but est de vérifier, avant l'insertion, il ya une duplication d'une clé primaire (clé primaire) ou une clé unique (clé unique), et si cela arrive, le moteur de un'UPDATE MySQL au lieu d'insertion.

L'avantage de cette clause est clair: vous écrivez une requête unique au lieu de deux avec des avantages en termes de performances et de nettoyage de code.

Prenons un exemple. Supposons que nous voulons faire un script simple qui effectue l'enregistrement des visiteurs de notre site. En dessous de la structure de la table de notre base de données:

  • IP (clés)
  • numero_visite
  • ultima_visita
Voulant à enregistrer toutes les adresses IP en transit sur nos pages, nous avons, selon la logique habituelle, faire un SELECT d'abord vérifier préliminaires que l'adresse IP n'est pas déjà dans la DB et seulement si la réponse est négative (IP non présent) pour interroger INSERT.

Merci à l'INSERT syntaxe ... ON UPDATE DUPLICATE KEY ... nous pouvons obtenir le même résultat avec une seule requête:

 



 INSERT INTO ip_visitatori ('123 .123.123.123 ', 1, MAINTENANT ())

 





 SUR DPLICATE CLÉS







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

 
Ainsi, si l'IP est l'inclusion est faite, sinon vous exécutez une simple mise à jour du dossier touché. En utilisant cette syntaxe permet d'obtenir un avantage en termes de performance égale à 30%.

Avec un peu de l'imagination et l'ingéniosité de la clause en question, il peut être très utile dans diverses circonstances.
Par exemple, nous pouvons l'utiliser en combinaison avec une condition. Voici un exemple: Supposons que vous ayez une table d'un site d'enchères en ligne hypothétiques structuré comme suit:

  • ID_asta
  • migliore_offerta
Supposons que vous voulez procéder au placement d'une nouvelle offre, si l'enchère a déjà offert il y aura une mise à niveau simple, mais seulement si l'offre est supérieure à celle déjà là:
 



 Offres INSERT INTO VALUES (1, 120)

 





 SUR DPLICATE CLÉS







 UPDATE migliore_offerta = SI (VALUES (migliore_offerta) <120, 120, les valeurs (migliore_offerta))

 
Grâce à une simple requête, nous avons résolu d'un seul coup ... Sinon, nous aurions dû utiliser plusieurs requêtes avec un gaspillage subséquent des ressources (et un plus grand risque d'erreurs).

Dans la même catégorie ...
E-Learning
MS Access (Avancé) MS Access (Avancé)
Apprenez à créer et gérer des bases de données rapidement et facilement. A partir de 29 €.
MySQL (Cours) MySQL (Cours)
Gestion des bases de données open-source. A partir de 39 €.
SQL et bases de données (cours) SQL et bases de données (cours)
Créer et gérer des bases de données relationnelles. A partir de 39 €.
Liens sponsorisés