Mysql Update批量更新的几种方式

 更新时间:2019年02月26日 10:40:44   作者:bluexue0724  
今天小编就为大家分享一篇关于Mysql Update批量更新的几种方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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

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

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

for x in xrange(10):
  sql = ''' UPDATE mytable SET myfield='value' WHERE other_field='other_value'; '''

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

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语句:

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 这么强大的方法 ,它不仅可以插入数据 当然也可以用于更新数据 作为一个经常搞事情的人 这些东西要经常相互用下 才可以对比出结果

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)

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • mysql函数group_concat和find_in_set的用法

    mysql函数group_concat和find_in_set的用法

    这篇文章主要介绍了mysql函数group_concat和find_in_set的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • MySQL启动时InnoDB引擎被禁用了的解决方法

    MySQL启动时InnoDB引擎被禁用了的解决方法

    最近在工作中遇到一个问题,现将解决的方法分享出来供大家参考学习,下面这篇文章主要给大家介绍了关于MySQL启动时InnoDB引擎被禁用了的解决方法,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • MySQL8 临时关闭缓存的方法实现

    MySQL8 临时关闭缓存的方法实现

    在某些场景下,如基准测试、数据一致性检查或高频数据更新,可能需要临时关闭缓存以获得更准确的性能数据或解决性能问题,本文就详细的介绍一下MySQL8 临时关闭缓存的方法实现,感兴趣的可以了解一下
    2024-10-10
  • MySQL数据库Event定时执行任务详解

    MySQL数据库Event定时执行任务详解

    这篇文章主要介绍了MySQL数据库Event定时执行任务
    2017-12-12
  • MySQL数据过滤与计算字段实战指南

    MySQL数据过滤与计算字段实战指南

    本文介绍了MySQL数据过滤与计算字段的实战技术,包括多条件组合、通配符过滤、正则表达式搜索和计算字段的使用,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • MySQL数据库CPU飙升到500%的原因和解决方案

    MySQL数据库CPU飙升到500%的原因和解决方案

    这篇文章讨论了MySQL CPU使用率高达500%的问题,并提出了灭火、查因、防复发的处理步骤,灭火包括找到并终止问题SQL,查因涉及分析全表扫描、锁等待和排序等,防复发则包括优化索引、限制连接数、应用层限流和缓存等措施,需要的朋友可以参考下
    2026-02-02
  • mysql 5.7.17 安装配置方法图文教程(windows)

    mysql 5.7.17 安装配置方法图文教程(windows)

    这篇文章主要为大家分享了mysql 5.7.17 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 浅谈Mysql时间的存储 datetime还是时间戳timestamp

    浅谈Mysql时间的存储 datetime还是时间戳timestamp

    本文主要介绍了浅谈Mysql时间的存储 datetime还是时间戳timestamp,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • MySQL CHAR和VARCHAR存储、读取时的差别

    MySQL CHAR和VARCHAR存储、读取时的差别

    这篇文章主要介绍了MySQL CHAR和VARCHAR存储的差别,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • MySQL索引的5种应用

    MySQL索引的5种应用

    本文主要介绍了MySQL索引的5种应用,包含聚集索引,唯一索引,非唯一(普通)索引,全文索引,组合索引等,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论