ON DUPLICATE KEY UPDATE 语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。
注意点1:我们使用该语句的时候注意这条语句判断该条记录是否存在的标准是什么?由于同一个值是可以同时出现在多个记录中的,所以必须有个字段是唯一不能重复的。
注意点2:规则如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。所以 ON DUPLICATE KEY UPDATE是不能写where条件的。
实战案例:
<insert id="insertInprogressChip" parameterType="ChipDataInfo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO chip_montage_inprogress(activity_id, unique_code, chip_index_one, chip_index_two, chip_index_three, chip_index_four, chip_index_five, chip_index_six, chip_index_seven, chip_index_eight, chip_index_nine, chip_montage_finished)
VALUES (#{activityId},#{uniqueCode},#{chipIndexOne},#{chipIndexTwo},#{chipIndexThree},#{chipIndexFour}, #{chipIndexFive}, #{chipIndexSix}, #{chipIndexSeven}, #{chipIndexEight}, #{chipIndexNine}, #{chipMontageFinished})
ON DUPLICATE KEY UPDATE
chip_index_one =#{chipIndexOne},
chip_index_two=#{chipIndexTwo},
chip_index_two=#{chipIndexTwo},
chip_index_three=#{chipIndexThree},
chip_index_four=#{chipIndexFour},
chip_index_five=#{chipIndexFive},
chip_index_six=#{chipIndexSix},
chip_index_seven=#{chipIndexSeven},
chip_index_eight=#{chipIndexEight},
chip_index_nine=#{chipIndexNine}
</insert>