1. INSERT ... ON DUPLICATE KEY UPDATE

  例如:表(group_project)中有ID列(primary key )和project_id列(unique key),如果记录在表中已经存在,则影响行数是0

void bindProjectInfo(@Param("groupId") Long groupId, @Param("list") List<Long> resProjectIds);
<insert id="bindProjectInfo">
INSERT INTO group_project (project_id, group_${groupId}) VALUES
<foreach collection="list" item="projectId" index="index" separator=",">
(#{projectId}, #{groupId})
</foreach>
ON DUPLICATE KEY UPDATE group_${groupId} = #{groupId}
</insert>

  解释(针对单条数据而言):记录插入时,有唯一键,没有主键字段列,如果出现重复,就执行更新操作,相当于UPDATE group_project SET group_${groupId} =  #{groupId} WHERE project_id = #{peojectId},影响行数是2;否则执行新增操作,影响行数是1。 

void bindProjectInfo(@Param("id") Long id, @Param("groupId") Long groupId, @Param("list") List<Long> resProjectIds);
<insert id="bindProjectInfo">
INSERT INTO group_project (id, project_id, group_${groupId}) VALUES
<foreach collection="list" item="projectId" index="index" separator=",">
(#{id}, #{projectId}, #{groupId})
</foreach>
ON DUPLICATE KEY UPDATE group_${groupId} = #{groupId}
</insert>

  解释(针对单条数据而言):记录插入时,有主键和唯一键列,如果出现重复,就执行更新操作,相当于UPDATE group_project SET group_${groupId} =  #{groupId} WHERE id = #{id} OR project_id = #{peojectId} limit 1,影响行数是2;否则执行新增操作,影响行数是1。

可参考:官网insert ... on duplicate key update的用法介绍

库数据有则修改,无则新增sql的更多相关文章

  1. 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

  2. DB 分库分表(5):一种支持自由规划无须数据迁移和修改路由代码的 Sharding 扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

  3. mysql 已有数据字符集的修改

    mysql 字符集的修改 可以使用set names utf8 通过修改配置文件 可修改参数 default_character_set=utf8 但是以上修改方法只对数据库中新增的记录生效,如果数据 ...

  4. MySQL的表分区详解 - 查看分区数据量,查看全库数据量----转http://blog.csdn.net/xj626852095/article/details/51245844

    查看分区数据量,查看全库数据量 USE information_schema; SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PAR ...

  5. Django-开放静态资源-获取请求携带的数据-pychram连接数据库-修改Django默认数据库-DjangoORM操作--表管理-记录管理-01

    目录 关于静态资源访问 为什么要配置静态文件才能获取静态资源 常见的静态文件种类 如何配置来开启访问权限 禁用浏览器缓存 django的自动重启机制(热启动) 静态文件接口动态解析 向服务器发送数据 ...

  6. 帝国cms 此栏目暂无任何新增信息处理办法

    在做一个新网站的时候不能保证每个栏目都能填充内容,当某个栏目没有内容填充的时候总会出现“此栏目暂无任何新增信息”看着挺不舒服. 其实想删除这行字也挺简单,只需要修改下语言包即可!如下: 找到语言包文件 ...

  7. MySQL数据库数据存放位置修改

    MySQL数据库数据存放位置修改 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方 ...

  8. 基于单例使用ThreadLocal对多线程下数据的访问修改

    package cn.lyy.thread; import java.util.Random; /** * 基于单例模式的基础上,使用ThreadLocal为每一个进入的线程生成一个实例, * 用来对 ...

  9. mongo-spark-读取不同的库数据和写入不同的库中

    mongo-spark-读取不同的库数据和写入不同的库中 package com.example.app import com.mongodb.spark.config.{ReadConfig, Wr ...

随机推荐

  1. java list map set array 转换

    1.list转set Set set = new HashSet(new ArrayList()); 2.set转list List list = new ArrayList(new HashSet( ...

  2. git 版本管控 发布

    https://www.cnblogs.com/charlesblc/p/6051569.html http://www.ruanyifeng.com/blog/2012/07/git.html 1. ...

  3. 一、rollup

    参考:reduxreach-routerrollup-starter-librollup-starter-approller-clicreate-react-library 一.安装 npm inst ...

  4. c提高第三次作业

    1. char buf[] = "abcdef"; //下面有啥区别? const char *p = buf; //p指向的内存不能变 char const *p = buf; ...

  5. stop()在animate中的用法

    stop 是jQuery中用于控制页面动画效果的方法.运行之后立刻结束当前页面上的动画效果.stop在新版jQuery中添加了2个参数:第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的 ...

  6. DaishaPocedureOfMine(代码)

    create procedure GetGoodsInfoByPageNumber ( @provideID int, @pageNumber int, @GoodsCountOfOnePage fl ...

  7. 速查mysql数据大小

    速查mysql数据大小 # 1.查看所有数据库大小 mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data ...

  8. Git 分支 (三) 分支管理&&分支开发工作流

    分支管理 git branch 命令不只是可以创建与删除分支. 如果不加任何参数运行它,会得到当前所有分支的一个列表: 注意 master 分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当 ...

  9. 深入浅出mybatis之返回主键ID

    目录 添加单一记录时返回主键ID 在映射器中配置获取记录主键值 获取新添加记录主键字段值 添加批量记录时返回主键ID 获取主键ID实现原理 添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前 ...

  10. John von Neumann和Ulam

    John von Neumann和Ulam是好朋友,两人经常在一起喝酒.旅行.谈女人.有一次诺伊曼认出身边的一位女士,他们交谈了几句.随后他给Ulam介绍那是他的一位老朋友,刚刚离婚.Ulam就问:那 ...