Mysql Update批量更新的几种方式分享

今天微点阅读小编就为大家分享一篇关于Mysql Update批量更新的几种方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

通常情况下,我们会使用以下SQL语句来更新字段值:

1

UPDATE mytable SET myfield='value' WHERE other_field='other_value';

但是,如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?刚开始你可能会想到使用循环执行多条UPDATE语句的方式,就像以下的python程序示例:

1

2

for x in xrange(10):

  sql = ''' UPDATE mytable SET myfield='value' WHERE other_field='other_value'; '''

这种方法并没有什么任何错误,并且代码简单易懂,但是在循环语句中执行了不止一次SQL查询,在做系统优化的时候,我们总是想尽可能的减少数据库查询的次数,以减少资源占用,同时可以提高系统速度。幸运的是,还有更好的解决方案,只不过SQL语句稍微复杂点,但是只需执行一次查询即可,语法如下:

1

2

3

4

5

6

7

UPDATE mytable

  SET myfield = CASE other_field

    WHEN 1 THEN 'value'

    WHEN 2 THEN 'value'

    WHEN 3 THEN 'value'

  END

WHERE id IN (1,2,3)

这样的SQL语句是很容易理解的,也就是用到了很多编程语言都有的关键字 CASE,根据id字段值来进行不同分支的当型判断,

如果你需要更新一行记录的多个字段,可以用以下SQL语句:

1

2

3

4

5

6

7

8

9

10

11

12

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)

以上方案大大减少了数据库的查询操作次数,大大节约了系统资源

不过这个有个缺点 : 要注意的问题是SQL语句的长度,需要考虑程序运行环境所支持的字符串长度,当然这也可以更新mysql的设置来扩展。

当然python这么强大的语言还给我们提供了executemany 这么强大的方法 ,它不仅可以插入数据 当然也可以用于更新数据 作为一个经常搞事情的人 这些东西要经常相互用下 才可以对比出结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

update_sql = ''' UPDATE mayi_order_image

set order_city = %s

where user_ip = %s and dt = %s and id = %s

 and user_ip is not null and (order_city is null or order_city = '' )

 '''

pp = []

for x in xrange(len(result)):

  ip = result[x][0]

  id_ = result[x][1]

  add = dbip.lookup(str(ip))

  adds = add.split('\t')

  address = str(adds[0]) + ','+str(adds[1] )+ ','+ str(adds[2])

  pp.append((address,ip,end,id_))

  if x%5000 == 0:

    saveLog_many(update_sql,pp)

    pp = []

saveLog_many(update_sql,pp)

是不是这个更方便一些 但是吗 速度 问题 我感觉可以和第二种结合一下对比一下会更好呢

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

转自:微点阅读   https://www.weidianyuedu.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值