Mysql批量更新

Mysql批量写入

在我们做项目的过程中,经常会碰到一次性写入mysql多条不同的数据.我们知道对于这种批量的写入操作,出于效率的原因,我们大多时候都采用的是把写入的数据打包成一个sql语句一次性的执行完成.对于插入操作我们可以使用如下的方式:

INSERT INTO TableName VALUES (1, "test1"),(2, "test2");

通过上面的sql就可以在表名为TableName的表中一次性建立两条数据,当然如果想写入更多的数据可以使用for循环进行sql语句拼接来实现.那么对于更新多条记录的时候mysql有没有提供一种处理方法呢,答案是有的.

Mysql 批量更新

UPDATE TableName 
    SET ColumnName = Case id
        when 1 then "test1"
        when 2 then "test2"
    end
WHERE id IN (1,2)

这条语句的意思是:更新名字为TableName中的某个字段ColumnName,当id值的1时,该字段的值会被更新为”test1”,当id为2时该字段的值被更新为”test2”.其实对于我们程序猿来说这个是比较好理解的,就相当于我们程序结构中的switch…case语句.上面是一次性更新一个字段,那么要更新多个字段怎么办呢?如下所示:

UPDATE TableName 
    SET ColumnName = CASE id
        when 1 then "test1"
        when 2 then "test2"
    END,
    SET ColumnName2 = CASE id
        when 1 then "test3"
        when 2 then "test4"
    END
WHERE id IN (1,2)

现在我们知道了如何来批量更新一个表中的多个字段,通过一个例子我们来学习一下.表结构和数据如下图:

这里写图片描述

实现的目标:把id是63506163和62051322这两个用户的角色改为2.我们可以这样写

UPDATE test 
    SET role = CASE mem_id
        when 63506163 then 2
        when 62051322 then 2
    END
WHERE team_id = 327

好,我们来运行一下上面语句,在查看得到结果是不是我们想要的.执行完之后得到了一条错误信息

 Column 'role' cannot be null

上面的错误信息说的很明确没有给role设置正确的值.是我们批量更新的思路不对吗?其实不是,在使用批量更新的更新的时候,where条件中必须使用CASE后面的字段作为筛选条件. 重新修改为:

UPDATE test 
    SET role = CASE mem_id
        when 63506163 then 2
        when 62051322 then 2
    END
WHERE team_id = 327 AND mem_id in (63506163, 62051322)

再次运行,得到如下成功的结果:

affected rows : 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值