使用 CASE WHEN/THEN/ELSE 更新 MySQL
问题:
尝试时使用 CASE WHEN/THEN/ELSE 语句更新大型 MyISAM 表,查询独占CPU并需要过多的时间才能完成。此外,它会更新表中的所有行,甚至是查询中未指定的行。
解释:
此行为的原因是 MySQL 解释 CASE 语句更新表中的所有行。不匹配任何 WHEN 条件的行将被分配 NULL 值。
解决方案:
要避免此问题,应修改查询以包含 ELSE将现有值分配给与任何 WHEN 条件都不匹配的行的语句。此外,可以使用 WHERE 子句将更新限制为仅指定的行。
更正后的查询:
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);
以上是为什么我的 MySQL CASE WHEN 更新缓慢并影响所有行?的详细内容。更多信息请关注PHP中文网其他相关文章!