Inverser deux colonnes d’une table MySQL

Il peut arriver pour une raison ou une autre de vouloir inverser deux colonnes d’une table MySQL. Plutôt que de s’embêter à créer des champs ou des tables supplémentaires pour effectuer la modification, il est possible dans certains cas de résoudre ce problème en une requête. Le seul problème, et il est de taille j’en conviens, est qu’il faut que les deux colonnes soit du même type. Il n’est pas possible d’inverser un champ de type INT avec un de type CHAR par exemple car la requête permute les données mais ne touche pas à la structure de la table. Si la structure de votre table vous le permet, ce petit bout de code devrait pas mal vous simplifier la vie (N’oubliez pas de faire une sauvegarde avant !!)

UPDATE my_table SET a=@tmp:=a, a=b, b=@tmp;

Prenons un exemple si cette requête n’est pas très claire… Voici une table ‘users’ :

On voudrait inverser le contenu des colonnes ‘name’ et ‘email’. On tape la requête magique en remplaçant les variables par les entêtes des colonnes qui nous intéressent :

UPDATE users SET `name`=@tmp:=`name`, `name`=`email`, `email`=@tmp;

Et voilà, on arrive bien au résultat escompté !

Il ne reste plus qu’à inverser le nom des colonnes (à la main ou à coup d’ALTER … CHANGE pour les plus courageux). L’opération est très rapide, j’ai fais un test avec 1000 enregistrements et j’obtiens :

Voilà, j’ai récupéré cette astuce sur http://www.rngtng.com/2009/06/24/mysql-how-to-swap-entires-of-two-columns-with-just-one-query/

Laisser un commentaire

Vous pouvez ces balises HTML dans votre commentaire :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current month ye@r day *