MySQL中批量更新同一列多行数据的正确方法
MySQL多行批量更新的正确实现方式
你的错误根源是不符合MySQL的UPDATE语法规则——单个UPDATE语句不能重复使用SET和WHERE子句,MySQL无法解析这种格式。下面提供几种可行的批量更新方案:
方案一:使用CASE WHEN在单条UPDATE中批量更新
这是最常用的批量更新方式,通过CASE语句根据不同id匹配对应值,一次完成所有目标行的更新:
UPDATE stu SET class = CASE id WHEN 2 THEN '5th' WHEN 3 THEN '6th' WHEN 4 THEN '6th' WHEN 5 THEN '7th' WHEN 6 THEN '7th' WHEN 7 THEN '8th' END WHERE id IN (2,3,4,5,6,7); -- 限定更新范围,避免误改其他行
CASE id会根据id值匹配对应分支,为class列赋值- 末尾的
WHERE子句必须添加,否则未被匹配到的行class会被设为NULL
方案二:使用INSERT ... ON DUPLICATE KEY UPDATE(需主键/唯一索引)
如果id是表的主键或唯一索引,可以用这种方式,本质是插入数据时若主键重复则执行更新:
INSERT INTO stu (id, class) VALUES (2, '5th'), (3, '6th'), (4, '6th'), (5, '7th'), (6, '7th'), (7, '8th') ON DUPLICATE KEY UPDATE class = VALUES(class);
- 要求
id列必须是主键或唯一约束,否则会直接插入新行而非更新 - 这种方式适合同时处理新增和更新的场景
方案三:执行多条独立的UPDATE语句(用分号分隔)
如果不想用复杂语法,也可以将单条更新语句用分号分隔,一次性执行:
UPDATE stu SET class='5th' WHERE id = 2; UPDATE stu SET class='6th' WHERE id = 3; UPDATE stu SET class='6th' WHERE id = 4; UPDATE stu SET class='7th' WHERE id = 5; UPDATE stu SET class='7th' WHERE id = 6; UPDATE stu SET class='8th' WHERE id = 7;
- 这种方式逻辑简单直观,适合数据量不大的场景
内容的提问来源于stack exchange,提问作者Unidan
相关产品推荐
相关产品推荐

