是否有批量更新MySQL数据的方法

发布于 2022-08-24 02:30:06 字数 521 浏览 15 评论 0

初学编程,遇到需要批量更新的数据时,我的做法是用循环语句写入每一条数据,也就是每条更新要写一次数据库。自己也发现这样做效率很低,想是如果请求一次就能更新所有数据该有多好,特来寻找答案。

比如现在有下列数据:

Name   id   ScoreA   ScoreB
Jim    1    90       91
Ken    2    92       93
Kate   3    97       95
Lily   4    95       98

当我要更新这些人的分数时,用下列语句:

UPDATE table SET ScoreA = 99 WHERE id = 1;
UPDATE table SET ScoreA = 96 WHERE id = 2;
UPDATE table SET ScoreB = 93 WHERE id = 2;
UPDATE table SET ScoreB = 94 WHERE id = 3;
UPDATE table SET ScoreA = 95 WHERE id = 4;

不知道有没有更高效的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

離人涙 2022-08-31 02:30:06
  1. 从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);
  2. 从通信协议角度,你可以把多条SQL用分号隔开,一次性发送给数据库服务器执行,这样就达到了你请求一次更新多条的效果,为保证原子性,你可能得开启事务。HandlerSocket支持Bulk insert,但是否支持bulk update我没查到明文证据,我推测是不支持的。
  3. 新人有追根溯源精神很好,欢迎继续探究此类问题,同时也要多利用搜索引擎寻找答案。等你实际工作后,不建议在这个问题上浪费时间,每发送一个SQL就更新一条挺好的,不算很低效
辞旧 2022-08-31 02:30:06

有一种方法是这样的,不过只能更新一个字段

UPDATE table 
    SET ScoreA = CASE id
        WHEN 1 THEN '99'
        WHEN 2 THEN '96'
        WHEN 3 THEN '94'
    END
WHERE id IN (1,2,3)

具体请看http://www.ghugo.com/update-multiple-...,前几天我也遇到同样的问题,于是google了一番。

花伊自在美 2022-08-31 02:30:06

因为你的set的值不一样 不能用批量更新!

清音悠歌 2022-08-31 02:30:06

把数据保存到一个文本文件中,字段间用TAB分隔,然后在mysql中执行

LOAD DATA INFILE "/PATH/oo.txt" REPLACE INTO TABLE xx;

凯凯我们等你回来 2022-08-31 02:30:06

嘿嘿, 我来挖个坟。

UPDATE categories
    SET display_order = CASE id
        WHEN 1 THEN 3
        WHEN 2 THEN 4
        WHEN 3 THEN 5
    END,
    title = CASE id
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

不是本人写的,链接在这:
mysql语句:批量更新多条记录的不同值

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文