MySQL批量更新(上) + Mybatis 实现

批量更新的几种实现方式

前言

增删改查-数据库四大基本操作,批量更新如何实现呢?

方法一:CASE 指令

MySQL官方给出的一个控制指令可以解决这个问题:CASE

SQL原理

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

Or:

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE
 这个是基本原理,有两种实现方式。<br />对于第一种语法,case_value是一个表达式。 将该值与每个WHEN子句中的when_value表达式进行比较,直到其中一个相等。 找到相等的when_value时,将执行相应的THEN子句statement_list。 如果when_value不相等,则执行ELSE子句statement_list。<br />此语法不能用于测试是否与NULL相等,因为NULL = NULL为false。具体原因查看:  [Section 3.3.4.6, “Working with NULL Values”](https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html).<br />


对于第二种语法,将评估每个WHEN子句search_condition表达式,直到一个表达式为true为止,此时将执行其对应的THEN子句statement_list。 如果没有search_condition等于,则执行ELSE子句statement_list(如果存在)。如果没有when_value或search_condition与测试的值匹配并且CASE语句不包含ELSE子句,则CASE语句返回错误。




总结:
看起来只是写法不同,其实是应用场景不同,第一种只适合简单的等值判断,而第二种每个都可以写不同的判断条件!

举个例子:

复制代码代码如下:

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语句更新多条记录了。

Mybatis实现


第一种:

UPDATE `nuc_el_device_sku`
SET
    gmt_modified = now()
    <trim prefix=", organization_id = case id" suffix="end">
        <foreach collection="items" item="item" index=
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值