美文网首页
mybatis&&mysql中批量插入更新语句

mybatis&&mysql中批量插入更新语句

作者: y三小石 | 来源:发表于2017-10-09 21:32 被阅读0次

    一.背景

    最近在做一个项目的重构工作,其中涉及到了一部分数据的清洗和同步工作。在特定的情况下会用到一些特殊的mysql 操作。

    二.用法技巧

    1.mysql ON DUPLICATE KEY UPDATE

    如果你指定了ON DUPLICATE KEY UPDATE,如果在一个UNIQUE索引或PRIMARY KEY中出现重复值,就会执行update之后的操作,否则执行insert操作。

    insert into table_name (name, age)values ('xxx', 19);

    如果 name为唯一索引且name为'xxx'的记录已经存在,则会报错.

    此时为了解决这个问题有三种方案。

    (1)忽略

    insert ignore into table_name (name, age)values ('xxx', 19);

    这条sql会被忽略掉。

    (2)完全覆盖

    replace ignore into table_name (name, age)values ('xxx',19);

    这条语句就相当于先把原来表中的记录删除掉,然后在重新插入。建议在清洗数据的时候使用,因为跑数据可能由于某些不可抗拒的因素中断,此时你就需要接上断点,可能会有重合,避免报错的同时又保证了数据的可靠性。(具体业务具体分析)

    (3)更新部分字段

    insert into table_name (name, age)values ('xxx', 18) on duplicate key update age = 19.

    此条语句只更新了age字段。

    2.也可以使用ON DUPLICATE KEY UPDATE实现批量更新

    INSERT INTO table_name (name, age) VALUES 

    <foreach collection="list" item="persion" index="index" separator=",">

       (#{name}, #{age}1️⃣},

    </foreach>

    ON DUPLICATE KEY UPDATE 

    age = VALUES(age) //此处的age为1️⃣处的age

    相对于case when 会更加简介。

    3.msql if语句的使用

    mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用。

    (1)IF(expr1,expr2,expr3)

    select if(sva=1,"男","女")as ssva from table_name  where id ='111'

    (2)也可以与count连着用

    select count(if(if(age>18,true,null))) from table_name;

    得出age>18的数量。

    相关文章

      网友评论

          本文标题:mybatis&&mysql中批量插入更新语句

          本文链接:https://www.haomeiwen.com/subject/lqtmyxtx.html