zoukankan      html  css  js  c++  java
  • 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. 数据量很大时,不推荐使用。
  • 相关阅读:
    Go笔记
    EFCore CodeFirst操作MySQL
    基于NET Core简单操作Kafka
    NETCore2.2/3.0+使用带有权限验证的Swagger
    Net操作RabbitMQ
    Mysql报错问题汇总
    GDSM自动化部署shell脚本
    NET操作Redis
    ViewState原理
    使用jsonp跨域请求
  • 原文地址:https://www.cnblogs.com/luoguixin/p/14954796.html
Copyright © 2011-2022 走看看