首页 >数据库 >mysql教程 >MySQL UPDATE with CASE:为什么它会更新所有行以及如何修复它?

MySQL UPDATE with CASE:为什么它会更新所有行以及如何修复它?

Susan Sarandon
Susan Sarandon原创
2024-12-01 07:52:14365浏览

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

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn