ON DUPLICATE KEY UPDATE应用场景
解决重复数据插入问题,可在数据库中添加字段索引,加以控制数据重复的字段;
当数据库中存在所设置索引字段记录时,执行这条语句会更新数据(可自定义更新字段),而不存在设置索引字段记录时,则会插入数据。
数据库索引设置
1.数据表索引的名称(自定义)
2.索引添加的字段,这些字段共同组成一个索引;
3.索引类型,此业务应选取"UNIQUE",约束唯一标识数据库表中的每条记录
SQL语句实现
插入单条数据
INSERT INTO t_price (
id,
project,
price,
remark,
user_id,
dept_id,
STATUS,
creater,
create_time
)
VALUES
(
#{id,jdbcType=VARCHAR}, #{project,jdbcType=VARCHAR}, #{price,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{deptId,jdbcType=VARCHAR},
#{status,jdbcType=VARCHAR}, #{creater,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR}
) ON DUPLICATE KEY UPDATE create_time = #{createTime,jdbcType=VARCHAR};
控制台打印的数据
Preparing: insert into t_price ( id, project, price, user_id, dept_id, status, creater, create_time ) values ( ?, ?, ?, ?, ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE create_time = ?;
Parameters: a2144a3afef64ca9bb2555c166e405a0(String), 829a74a4d4814a7f82ead9a40208120f(String), 0.01(String), e3654267858d4de29a12733b3f25ed75(String), e3654267858d4de29a12733b3f25ed75(String), 1(String), 8aa1bd629c744a2b8130aa7eef391b7d(String), 2019-05-16 17:38:08(String), 2019-05-16 17:38:08(String)
插入多条数据
INSERT INTO tab (
id,
project,
price,
remark,
user_id,
dept_id,
STATUS,
creater,
create_time
)
VALUES
< foreach collection = "list" item = "item" SEPARATOR = "," > (
#{id,jdbcType=VARCHAR}, #{project,jdbcType=VARCHAR}, #{price,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{deptId,jdbcType=VARCHAR},
#{status,jdbcType=VARCHAR}, #{creater,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR)
</ foreach > ON DUPLICATE KEY UPDATE create_time = #{createTime,jdbcType=VARCHAR};
同时增加“project”,“user_id”,“user_id”三者都相同的数据的时候,只会增加一条,之后的数据将不会增加到数据库,只会修改掉“create_time”