使用 CASE WHEN/THEN/ELSE 更新 MySQL MyISAM 表
问:当尝试使用 CASE WHEN/THEN/ELSE 更新大型 MyISAM 表中的特定行时CASE 语句中,查询会消耗过多的 CPU 并更新所有行,包括未指定的行。如何限制对预期行的更新?
答:当 CASE 语句不包含 ELSE 子句时,就会出现此问题。默认情况下,CASE 语句中未明确提及的行被分配 NULL 值。这会导致整个表出现不必要的更新。
要解决此问题,请将 ELSE 子句附加到 CASE 语句,并将 uid 列的现有值分配给它。这将防止更新影响 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 MyISAM UPDATE CASE WHEN 失败以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!