目录
使用 CASE WHEN/THEN/ELSE 进行 MySQL 更新:意外后果和改进的解决方案
首页 数据库 mysql教程 为什么我的 MySQL CASE WHEN 更新会影响所有行,如何修复?

为什么我的 MySQL CASE WHEN 更新会影响所有行,如何修复?

Dec 03, 2024 am 08:12 AM

Why Does My MySQL CASE WHEN Update Affect All Rows, and How Can I Fix It?

使用 CASE WHEN/THEN/ELSE 进行 MySQL 更新:意外后果和改进的解决方案

尝试优化 MyISAM 表上的大规模更新操作,开发人员使用了 CASE 功能。然而,查询表现出了意外的行为,影响了性能并影响了表中的所有行,甚至是 CASE 语句中未明确提及的行。

初始查询:

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    END
登录后复制

出乎意料的是,该查询更新了表中包含 2500 万条记录的每一行,并将所有未指定的行设置为 NULL。此行为与 CASE 语句的预期功能相矛盾,其中未提及的行应保持不变。

出现此意外结果的原因在于 CASE 语句中缺少 ELSE 子句。当行的 id 与任何指定条件都不匹配时,CASE 表达式的计算结果为 NULL。因此,MySQL 会用 NULL 更新所有行,无论它们最初是否在 CASE 语句中指定。

要纠正此问题并执行有针对性的更新,查询应包含 ELSE 子句:

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)
登录后复制

更新后的查询在 CASE 语句中添加了 ELSE 子句,确保所有未提及的行保留其 uid 的原始值。此外,还引入了 WHERE 子句,将更新操作限制为仅指定的 id(1、2 和 3),通过限制受影响的行来进一步提高效率。

以上是为什么我的 MySQL CASE WHEN 更新会影响所有行,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

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

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

减少在Docker中使用MySQL内存的使用 减少在Docker中使用MySQL内存的使用 Mar 04, 2025 pm 03:52 PM

减少在Docker中使用MySQL内存的使用

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

如何使用Alter Table语句在MySQL中更改表?

mysql无法打开共享库怎么解决 mysql无法打开共享库怎么解决 Mar 04, 2025 pm 04:01 PM

mysql无法打开共享库怎么解决

什么是 SQLite?全面概述 什么是 SQLite?全面概述 Mar 04, 2025 pm 03:55 PM

什么是 SQLite?全面概述

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) 在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) Mar 04, 2025 pm 03:54 PM

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? 如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? Mar 18, 2025 pm 12:00 PM

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)?

在MacOS上运行多个MySQL版本:逐步指南 在MacOS上运行多个MySQL版本:逐步指南 Mar 04, 2025 pm 03:49 PM

在MacOS上运行多个MySQL版本:逐步指南

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

如何为MySQL连接配置SSL/TLS加密?

See all articles