遇到需要批量更新的数据时,我的做法是用循环语句写入每一条数据,也就是每条更新要写一次数据库。自己也发现这样做效率很低,想是如果请求一次就能更新所有数据该有多好,特来寻找答案。
例如:
现在有下列数据:
更新这些人的分数时,用下列语句:
有没有更高效的方法?
楼上误人子弟 啊,不懂就不要说了,把多个结果结果集生成 一个表,多表关联更新,还可以用case where
方法1(我更倾向于方法1).
UPDATE table1,
(SELECT 1 AS id, 1 AS scoreA, 2 AS scoreB
UNION ALL SELECT 1 AS id,91 AS scoreA,98 AS scoreB
UNION ALL SELECT 2 AS id,92 AS scoreA,97 AS scoreB) temp
SET table1.scoreA = temp.scoreA, table1.scoreB = temp.scoreB
WHERE table1.id = temp.id ;
方法2.
UPDATE table1
SET scoreA= CASE id
WHEN 10001 THEN 98
WHEN 10002 THEN 97
WHEN 10004 THEN 92
WHEN 10006 THEN 92
WHEN 10039 THEN 93
END
WHERE
id IN ( 10001, 10002, 10004, 10006, 10039 )
从SQL语法角度,不存在一条SQL更新多条的SQL语法(UPDATE table1 SET col1=1 WHERE id>1这样的不算),只有一次插入多条的:INSERT INTO table1 (col1, col2) VALUES (value_1_1, value_1_2),(value_2_1, value_2_2),(value_3_1, value_3_2);
从通信协议角度,你可以把多条SQL用分号隔开,一次性发送给数据库服务器执行,这样就达到了你请求一次更新多条的效果,为保证原子性,你可能得开启事务。HandlerSocket支持Bulk insert,但是否支持bulk update我没查到明文证据,我推测是不支持的。
新人有追根溯源精神很好,欢迎继续探究此类问题,同时也要多利用搜索引擎寻找答案。等你实际工作后,不建议在这个问题上浪费时间,每发送一个SQL就更新一条挺好的,不算很低效
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。