Maison >base de données >tutoriel mysql >MISE À JOUR MySQL avec CASE : pourquoi met-il à jour toutes les lignes et comment y remédier ?
Mise à jour MySQL avec CASE : comportement et solution inattendus
Lors de l'utilisation de l'instruction CASE dans les requêtes MySQL UPDATE, il est important de comprendre son impact sur données. Dans l'exemple fourni, la requête d'origine visait à mettre à jour des lignes spécifiques en fonction de leur champ d'identification. Cependant, la requête a mis à jour de manière inattendue les 25 millions de lignes, introduisant des valeurs NULL.
Ce comportement découle de la nature de l'instruction CASE. Sans clause ELSE, MySQL interprète toute condition manquante comme égale à NULL. Par conséquent, toutes les lignes qui ne correspondaient pas aux valeurs d'identifiant spécifiées ont été mises à jour avec NULL pour la colonne uid.
Pour résoudre ce problème et mettre à jour de manière sélective des lignes spécifiques tout en préservant d'autres données, envisagez d'utiliser une clause ELSE pour fournir une valeur par défaut. valoriser ou maintenir la valeur existante. De plus, spécifiez les lignes qui doivent être mises à jour à l'aide de la clause WHERE.
Par exemple, la requête modifiée suivante répond à ces problèmes :
UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id in (1,2,3)
Cette requête met désormais à jour uniquement les lignes avec des valeurs d'identifiant. de 1, 2 et 3, laissant les lignes restantes inchangées. En combinant l'instruction CASE avec les clauses ELSE et WHERE, vous pouvez mettre à jour efficacement des lignes spécifiques sans modifier par inadvertance d'autres données du tableau.
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!