MySQL执行UPDATE更新3行数据仅1行受影响的问题求助
问题排查及修复方案
错误原因
你的SQL存在两个核心语法/逻辑错误,导致仅单行或无行被更新:
- 第一处错误:
WHERE条件中ID匹配逻辑错误
你写的some_id = ('7791, 1555, 363201')是将三个ID拼接为单个完整字符串进行匹配,只会命中some_id等于'7791, 1555, 363201'这一整个字符串的行,自然最多只能匹配到1行。正确写法是使用IN运算符,每个ID单独用引号包裹:some_id IN ('7791', '1555', '363201') - 第二处潜在问题:时间范围过滤限制
你额外加了date_updated between '2021-11-01' and '2021-11-03'的过滤条件,需要确认你要更新的三行原始date_updated值全部落在这个时间区间内,否则不在区间内的行不会被命中更新。 - 额外优化建议:
CASE表达式建议加默认值
目前的CASE逻辑如果匹配不到对应some_id,会将date_updated设置为NULL,建议添加ELSE date_updated避免误改非目标字段。
修正后的SQL语句
update some_table set date_updated = case some_id when '7791' then '2021-10-08 06:59:05' when '1555' then '2021-08-26 05:30:54' when '363201' then '2021-08-31 05:01:45' else date_updated end where some_id IN ('7791', '1555', '363201') and date_updated between '2021-11-01' and '2021-11-03';
操作建议
执行更新前建议先运行同条件的SELECT语句确认命中行数是否符合预期,避免误操作:
SELECT * FROM some_table where some_id IN ('7791', '1555', '363201') and date_updated between '2021-11-01' and '2021-11-03';
内容的提问来源于stack exchange,提问作者DK26
相关产品推荐
相关产品推荐

