使用 CASE 进行 MySQL 更新:意外行为和解决方案
在 MySQL UPDATE 查询中使用 CASE 语句时,了解其对数据。在提供的示例中,原始查询旨在根据 id 字段更新特定行。但是,查询意外更新了所有 2500 万行,引入了 NULL 值。
此行为源于 CASE 语句的性质。如果没有 ELSE 子句,MySQL 会将任何缺失的条件解释为等于 NULL。因此,所有与指定 id 值不匹配的行都将更新为 uid 列的 NULL。
要解决此问题并有选择地更新特定行,同时保留其他数据,请考虑使用 ELSE 子句来提供默认值价值或维持现有价值。此外,使用 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)
此查询现在仅更新具有 id 值的行1、2 和 3 行,其余行不受影响。通过将 CASE 语句与 ELSE 子句和 WHERE 子句相结合,您可以高效地更新特定行,而不会无意中修改表中的其他数据。
以上是MySQL UPDATE with CASE:为什么它会更新所有行以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!