MySQL插入重复数据时的几种处理方法

如果插入的数据会导致UNIQUE 索引PRIMARY KEY发生冲突/重复,处理类型有三种:

  一:不存在则插入,存在则更新

  SQL:

    INSERT INTO tablename(`name`, `age`) VALUES('Jack', 19) ON DUPLICATE KEY UPDATE `age`=19;

  说明: ON DUPLICATE KEY UPDATE 后可以根据字段名得到原来的值,从而实现自增或是其他运算,若是在mybatis中,还可以通过 `age`=VALUES(age)获取到最新记录的值.

    该方法同样可以用于批量操作

    SQL:

    INSERT INTO
      tablename(name, age, sex)
    VALUES
    <foreach collection="list" item="item" separator=",">
    (#{item.name},#{item.age},#{item.sex})
    </foreach>
    ON DUPLICATE KEY UPDATE
      age=age+1,
      query_time=now();    

  二:不存在则插入,存在则先删除旧数据,再插入新数据

  SQL:

    REPLACE INTO tablename(`name`, `age`) VALUES('aa', 18);

  批量操作:

    REPLACE into
    tablename(name,sex,age)
    values
      <foreach collection="list" item="item" separator=",">
     (#{item.name},#{item.sex},#{item.age})
      </foreach>

  三:不存在则插入,存在则则忽略此次操作/不插入数据

  SQL:

    INSERT IGNORE INTO tablename(`name`, `age`) VALUES('aa', 18);

    批量操作:     

      insert ignore into
      tablename(name,sex,age)
      values
        <foreach collection="list" item="item" separator=",">
        (#{item.name},#{item.sex},#{item.age})
        </foreach>
posted @ 2020-08-27 17:59  一路向北_还是北  阅读(1073)  评论(0编辑  收藏  举报