Mysql批量更新

2 篇文章 0 订阅
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL批量更新是通过一次性更新多条记录,以提高更新效率和性能的一种方法。常见的MySQL批量更新方法有以下几种: 1. 使用REPLACE INTO批量更新:通过将需要更新的记录一次性插入到一个临时表中,然后使用REPLACE INTO语句将临时表中的数据更新到目标表中。这种方法需要用户具有temporary表的create权限。 2. 使用INSERT INTO ... ON DUPLICATE KEY UPDATE批量更新:通过使用INSERT INTO ... ON DUPLICATE KEY UPDATE语句,可以将需要更新的记录一次性插入到目标表中,如果有重复的记录,则进行更新操作。这种方法适用于目标表有唯一索引或主键的情况。 3. 使用多值语法进行批量更新:通过使用多个值的语法,可以一次性更新多条记录。例如,使用UPDATE语句的多值语法:UPDATE table SET column1 = value1, column2 = value2 WHERE condition,其中value1和value2表示需要更新的多个值。 4. 使用LOAD DATA INFILE进行批量更新:通过将需要更新的数据保存在一个文本文件中,然后使用LOAD DATA INFILE语句将文本文件中的数据批量导入到目标表中。这种方法对于大规模的批量更新非常高效。 需要根据具体的需求和场景选择合适的MySQL批量更新方法。使用批量更新可以显著提高更新效率和性能,避免了逐条更新的低效率和可能导致阻塞的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [大批量更新数据mysql批量更新的四种方法](https://blog.csdn.net/Carey_Lu/article/details/118793662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MySQL批量更新的四种方法](https://blog.csdn.net/weixin_45707610/article/details/130900245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值