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