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 : pourquoi met-il à jour toutes les lignes et comment y remédier ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 07:52:14289parcourir

MySQL UPDATE with CASE: Why Does it Update All Rows and How to Fix It?

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!

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