一、使用replace into语句

1
replace into test(id,name) values ('asdaa','123141');
  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
  2. 否则,直接插入新数据。

二、使用ON DUPLICATE KEY UPDATE

1
2
insert into test(id,name) value ('11123','3wfwad')
ON DUPLICATE KEY UPDATE name = 'fssss';

贴一个mybatis上使用的案例(已做脱敏处理)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
insert into test
(
paycode,
amount,
idcard,
name,
product_name,
time,
status
) value
<foreach collection="trans" index="index" item="item" separator=",">
(#{item.paycode},#{item.amount},#{item.idcard},#{item.name},#{item.product_name},#{item.time},#{item.status})
</foreach>
ON DUPLICATE KEY UPDATE
amount=values(amount),idcard=values(idcard),name=values(name),product_name=values(product_name),time=values(time),status=IF(status='01','01',values(status));

二者区别

1、当插入数据主键或者unique索引没有冲突:
replace into和on duplicate key update的做法都是直接插入数据

2、出现主键或者unique索引冲突时:
replace into :先删除此行数据,然后插入新的数据

on duplicate key update:只是执行update后面的字段更新,其余字段不变。