如何用一条sql语句实现批量更新?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。

代码如下:

UPDATE mytable SET
myfield = CASE id WHEN 1 THEN 'value'WHEN 2 THEN 'value'WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3);

这里使用了case when 这个小技巧来实现批量更新。

举个例子:

代码如下:

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

这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

如果更新多个值的话,只需要稍加修改:

复制代码 代码如下:

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语句更新多条记录了。但是要在业务中运用,需要结合服务端语言,这里以java为例,构造这条mysql语句:

复制代码 代码如下:

 <update id="updateSort">UPDATE<include refid="Table_Name"/>SET display_order= CASE<if test="sortList != null"><foreach collection="sortList" open="" item="item" close="" separator="" index="index">WHEN id=#{item.id,jdbcType=BIGINT} THEN #{item.displayOrder,jdbcType=TINYINT}</foreach></if>ENDWHERE<if test="idList != null">id IN<foreach collection="idList" open="(" item="item" close=")" separator="," index="index">#{item}</foreach></if></update>

Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例相关推荐

  1. tp5 批量更新多条记录_Thinkphp怎么批量更新数据

    展开全部 ||thinkphp批量更新数据可以参考如下三种方法: 方法一: //批量修改 data二维数组 field关键字段62616964757a686964616fe59b9ee7ad94313 ...

  2. sql进行批量更新或者一条sql写出批量更新的语句

    有表如下 t_user:字段如下 id,name,phone t_phone:字段如下 uid,phone 其中t_phone表的uid字段是外键并且唯一,他引用t_user的id字段,现需要将t_p ...

  3. MySQL一条SQL语句查询多个科目的成绩

    MySQL一条SQL语句查询多个科目的成绩 SELECT pn.name,c.`cname`,SUM(CASE WHEN ps.coid='1' THEN sname END )AS 'domain' ...

  4. Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版

    文章目录 一. 根据相应的唯一主键来判断是否新增或更新 [对事务支持较好] 二.根据selectkey判断查询的count值是否为1,然后再进行新增或更新 前言:我们在做批量更新或者插入时候,不想在代 ...

  5. mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》

    一:概述 - 首先需要认识一下 Mysql 整体的基础架构 - 二:Mysql 的分层 - MySQL 可以分为 Server 层和存储引擎层两部分 - Server 层 - Server 层包括连接 ...

  6. mysql排序加权_2014.09.23 mysql 一条sql语句实现实现搜索功能(加权排序)

    一.加权排序原理 二.转化为SQL语句(合理使用case when xx then x else x end 等mysql的函数) 搜索功能的实现:加权排序原理 1.每一个关键字去匹配标题.标签.摘要 ...

  7. 关于Excel拼接sql语句,批量导入数据

    需求: 当我们需要把Excel中的数据(成百上千.成千上万条-)全部导入到数据库中,一条条写sql语句明显不理智,于是我们可以使用excel函数拼接sql语句,然后往下拉的方式自动拼接所有sql,批量 ...

  8. mysql 导入数据库sql语句_mysql中导入数据与导出数据库sql语句

    本文章来详细介绍关于mysql中导入数据与导出数据库sql语句,在mysql中常用的导入与导出数据的命令有source与mysqldump大家可参考. 1.例1:连接到本机上的MYSQL 首先在打开D ...

  9. mysql批量删除数据sql语句_mysql批量删除数据sql语句详解

    1.like与 in批量删除指定记录 like语法 like主要是用来模糊查询了 sql = "delete from A where field like '%ABC%'" 这个 ...

最新文章

  1. unix oracle控制台,Linux平台下启动oracle11gEM控制台
  2. 转MQTT SERVER 性能测试报告
  3. 十图详解TensorFlow数据读取机制(附代码)
  4. 用JavaScript玩转计算机图形学(一)光线追踪入门
  5. C语言之归并排序算法
  6. 设置某个元素的标签内容、设置元素的样式、层次选择器、总结选择器
  7. 【Transformer】Are Transformers More Robust Than CNNs?
  8. 百(垃)度(圾)之星初赛B hdu6114
  9. 一个漂亮的电子钟,纪念我们逝去的青春(含软硬件资料)
  10. Win7部署基础知识(2):制作WinPE
  11. 【华为云技术分享】[HDC.Cloud]基于鲲鹏平台的Ceph深度性能调优
  12. CentOS7安装后没网络的解决方法
  13. 笑脸哭脸循环c语言,买卖信号(哭脸笑脸)选股公式(源码)
  14. python加减乘除运算代码_四则运算python版
  15. 2021年高处安装、维护、拆除新版试题及高处安装、维护、拆除考试试卷
  16. 励志名言名句,2018励志名言名句大全
  17. html版贪吃蛇的项目计划书,自动贪吃蛇.html
  18. Solidworks二次开发平台 --- RyS.SwWorks [2015-09-18更新]
  19. C#视频处理,调用强大的ffmpeg
  20. Premiere 移动式 马赛克

热门文章

  1. JavaScript中的const
  2. Python operator.lt()函数与示例
  3. 怎么挖linux内核的漏洞,linux内核漏洞分析实战看看专家是怎么一步步...-卓优商学院问答...
  4. 2019写给对象的话_恋爱中写给对象看的说说 2019最流行的情侣间情话
  5. 为什么wait和notify必须放在synchronized中?
  6. Redis 过期策略与源码分析
  7. mssql 字增自段怎样重置(重新自增)|清空表已有数据
  8. python自动化测试常见面试题二_思考|自动化测试面试题第二波
  9. 计算机桌面上的输入法状态栏,输入法状态栏
  10. boost 线程 linux,Boost Linux线程第一课