Échanger les valeurs de colonnes dans MySQL sans renommer
L'échange de valeurs entre les colonnes d'une table MySQL peut être une opération utile lorsque l'ordre des colonnes existantes n'est pas ne correspond plus à vos besoins. Cependant, modifier la structure de la table pour renommer les colonnes peut ne pas être réalisable en raison de restrictions d'autorisation.
Au lieu de cela, vous pouvez utiliser les techniques suivantes :
Méthode 1 : Utilisation d'une variable temporaire
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
Cette méthode utilise une variable temporaire pour conserver la valeur d'une colonne tout en mettant à jour l'autre. Cependant, il ne gère pas efficacement les valeurs NULL.
Méthode 2 : la solution élégante de Dipin
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
L'approche de Dipin échange élégamment les valeurs, fonctionnant aussi bien avec et sans Valeurs NULL.
Méthode 3 : Utiliser un Cross-Join
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
Cette méthode utilise une jointure croisée entre des tables identiques pour effectuer l'échange. Il nécessite qu'une clé primaire soit présente dans la table.
Exemple de schéma de table
CREATE TABLE `swap_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x` varchar(255) DEFAULT NULL, `y` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO `swap_test` VALUES ('1', 'a', '10'); INSERT INTO `swap_test` VALUES ('2', NULL, '20'); INSERT INTO `swap_test` VALUES ('3', 'c', NULL);
En choisissant la méthode la plus appropriée en fonction de la structure et des contraintes de votre table, vous pouvez échanger avec succès les valeurs des colonnes sans avoir besoin de renommer les colonnes ou d'escalader les autorisations.
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!