MySQL数据库插入sql,有则修改,无则新增语法


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的用法介绍


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM