Mon compte - Login

AGENCE WEB WEBLANDES.COM

Sql, mysql mise à jour de plusieurs lignes.

Cet article explique comment faire une mise à jour sur plusieurs lignes en une seule requête dans MySQL.

Par exemple, supposons que vous souhaitiez mettre à jour la colonne “ville” sur vingt lignes dans une table. Vous pouvez le faire en utilisant une seule requête et en ne connaissant pas nécessairement les référence clé de chaque ligne. Cet article est écrit en utilisant MySQL 5.6 et MariaDB 10.0 comme serveur de base de données principal, mais la plupart des systèmes d'exploitation prendront en charge MySQL 5.6 et plus récent ou MariaDB 10.0 ou plus récent.

Exemple :

Nous devons mettre à jour toutes les lignes d’une table dont les villes sont égales à 'Stockholm' et remplacer 'Stockholm' par 'Madrid'

L’idée de base de la requête pourrait ressembler à :

UPDATE table SET ville = 'Madrid' WHERE ville = 'Stockholm';

Cette mise à jour se produirait sur les lignes du tableau, quelles que soient les références clés. En supposant que la requête ait réussi, il pourrait alors être possible de faire :

SELECT * FROM table WHERE ville = 'Madrid';

Cela sélectionnerait toutes les lignes où ville = 'Madrid' de la table et dresserait une liste de toutes les valeurs possibles pour la colonne anciennement ‘Stockholm‘ et renvoie TRUE si l'une de ces valeurs est égale à la valeur "Madrid".

Seulement ce genre d’UPDATE ne fonctionne pas toujours et peut mettre le serveur MySQL en déroute. En effet, la requête UPDATE demande de mettre à jour une sélection sur elle-même. Il y a, de fait, un problème de logique pour le serveur.

Il existe donc une solution qui exploite des variables temporairement directement dans la requête.

Dans l’exemple de remplacement d’un nom de ville par un autre, la solution efficace est :

UPDATE `table` T1 SET 
T1.`ville` = 'Madrid' WHERE
T1.`ville` IN
(SELECT `ville` FROM `table` T2 WHERE T2.`ville` = 'Stockholm') ;

La requête s’exécute ainsi à l’envers de notre sens de lecture.

Le résultat de (SELECT `ville` FROM `table` T2 WHERE T2.`ville` = 'Stockholm') est stocké dans T2 comme s’il s’agissait d’une table différente. Puis l’UPDATE T1 va piocher ses correspondances dans T2 et faire les mises à jour.

Selon le langage backend qui est exploité, il sera simple de remplacer les noms de la table, des champs et des valeurs par des variables de façon à ce que la requête soit dynamique.

Bon code !

#sql #mysql #truc #code #base #donnée #data
TOP