• mysql 批量插入, 如果重复自动更新


    摘要: 在更新大量数据时如果每条更新执行一次sql性能很低,也容易造成阻塞;批量更新时又有可能遇到主键重复的问题

    在更新大量数据时可能同时遇到两个问题:

    1. 如果每条更新执行一次sql性能很低,也容易造成阻塞;

    2. 批量更新时又有可能遇到主键重复的问题

    使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键)

    INSERT INTO mytable(id,pid,ele,anim) 
    VALUES (?,?,?,?),(?,?,?,?),(?,?,?,?)
    ON DUPLICATE KEY UPDATE pid=VALUES(pid),ele=VALUES(ele)
    //pid=VALUES(pid),ele=VALUES(ele) 表示出现在values中某列的id字段值与表中已有id字段值重复时,会更新对应记录的这两个字段
    
    //还可以指定其它值或进行运算:pid=pid+1,ele=ele-1
    
    //因为这里未指定列 anim,所以遇到重复id的列,表中该列的 anim字段不会更新
    
    //如果某列作为新记录被插入,则受影响行的值为1;如果表中原有的记录被更新,则受影响行的值为2

    它不但对唯一主键有效,对复合主键同样有效,复合主键设置:

    ALTER TABLE mytable ADD(CONSTRAINT PRIMARY KEY(id,pid));

    不过ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法,不要乱用哦

  • 相关阅读:
    用before 和after 清除浮动
    清除浮动最优
    pc端布局03
    PC端布局02
    >PC端常用布局01
    浮动
    盒模型-
    盒模型-外边距合并
    spring中的AOP
    AOP的概念
  • 原文地址:https://www.cnblogs.com/futao123/p/6396561.html
Copyright © 2020-2023  润新知