Maison >base de données >tutoriel mysql >Pourquoi ma mise à jour MySQL MyISAM avec CASE WHEN échoue-t-elle et comment puis-je y remédier ?

Pourquoi ma mise à jour MySQL MyISAM avec CASE WHEN échoue-t-elle et comment puis-je y remédier ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 18:01:11731parcourir

Why Does My MySQL MyISAM UPDATE with CASE WHEN Fail and How Can I Fix It?

Mise à jour des tables MySQL MyISAM à l'aide de CASE WHEN/THEN/ELSE

Q : Lorsque vous tentez de mettre à jour des lignes spécifiques dans une grande table MyISAM à l'aide d'un CASE, la requête consomme trop de CPU et met à jour toutes les lignes, y compris celles non spécifiées. Que peut-on faire pour limiter la mise à jour aux lignes prévues ?

R : Le problème survient lorsque l'instruction CASE n'inclut pas de clause ELSE. Par défaut, les lignes non explicitement mentionnées dans l'instruction CASE se voient attribuer des valeurs NULL. Cela entraîne des mises à jour inutiles sur l'ensemble de la table.

Pour résoudre ce problème, ajoutez une clause ELSE à l'instruction CASE, en lui attribuant la valeur existante de la colonne uid. Cela empêchera la mise à jour d'affecter les lignes non spécifiées dans les clauses WHEN.

De plus, incluez une clause WHERE pour spécifier explicitement les lignes qui doivent être mises à jour. Cela garantit que seules les lignes souhaitées sont ciblées.

Exemple :

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)

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