mysql使用on duplicate key update批量更新数据

需求:需要导入用户积分数据到积分总表total_score。 当total_score表中存在用户的数据时,直接更新score,update_at字段的值;否则插入一条新用户记录。

以往做法:循环select表中的user记录是否存在,存在则使用update;不存在则使用insert。
做法弊端:每处理一条记录需要操作两次数据库(select、update/insert)

优化做法:使用insert语句搭配 on duplicate key update使用。
做法注意:比如上面的需求,需要用户user唯一,就是total_score表中,每个用户只存在一个记录。给user_id设为unique

实现代码:

      insert into total_score(
            user_id,
            score,
            create_at,
            update_at
      ) values (
            101,
            10,
            now(),
            now()
      ) on duplicate key update score=score+10,update_at=now();

on duplicate key update使用注意事项:
  1. 要注意设置唯一索引;
  2. 不支持与where子句联合使用;
  3. 数据量很大时,不推荐使用。
posted @   不再犯错  阅读(1640)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示