Maison  >  Article  >  base de données  >  Comment réaliser des mises à jour et une récupération de lignes dans une seule requête MySQL ?

Comment réaliser des mises à jour et une récupération de lignes dans une seule requête MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 19:48:29462parcourir

How to Achieve Row Updates and Retrieval in a Single MySQL Query?

Réaliser des mises à jour et une récupération de lignes dans une seule requête MySQL

Dans MySQL, l'exécution de plusieurs requêtes peut prendre du temps. Pour optimiser les performances, il est souhaitable de combiner les requêtes en une seule. C'est le nœud d'une requête posée par Quan : deux requêtes peuvent-elles être fusionnées pour renvoyer des lignes mises à jour ?

La première requête sélectionne les lignes d'une table en fonction de critères spécifiques, tandis que la seconde met à jour les lignes répondant aux mêmes critères. La combinaison de ces requêtes nécessite une technique qui permet à la fois la lecture et l'écriture en une seule opération.

Une approche consiste à utiliser une sous-requête. Cependant, Quan a rencontré des limites avec cette méthode. Une solution alternative a émergé dans une recommandation de https://gist.github.com/PieterScheffers/189cad9510d304118c33135965e9cddb :

SET @uids := null;
UPDATE footable
   SET foo = 'bar'
 WHERE fooid > 5
   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;

Cette requête exploite les étapes suivantes :

  1. Initialiser une variable (@uids) sur null.
  2. Utilisez une instruction UPDATE pour modifier les lignes répondant aux critères tout en ajoutant également leurs valeurs fooid à @uids, créant ainsi une liste séparée par des virgules.
  3. Exécutez une instruction SELECT pour récupérer la valeur @uids mise à jour, qui contient la liste des valeurs fooid de ligne mises à jour.

Cette solution combine efficacement les mises à jour et la récupération de lignes, fournissant la fonctionnalité souhaitée dans une seule requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn