1、mysql寫法(on duplicate key update 語法必須配合唯一索引)
<insert id="insertOrUpdateNew">
insert into test
(a,b,c)
values
(#{a},#{b},#{c})
on duplicate key update
c = values(c)
</insert>
<insert id="insertOrUpdateNewNew">
insert into test
(a,b,c)
values
<foreach collection="list" item="l" separator=",">
(#{l.a},#{l.b},#{l.c})
</foreach>
on duplicate key update
c = values(c)
</insert>
2、postgresql寫法(on conflict 語法必須配合主鍵或唯一索引)
<insert id="insertOrUpdateNew">
insert into test
(a,b,c)
values
(#{a},#{b},#{c})
on conflict(a,b)
do update set
c = #{c}
</insert>
<insert id="insertOrUpdateNewNew">
insert into test
(a,b,c)
values
<foreach collection="list" item="l" separator=",">
(#{l.a},#{l.b},#{l.c})
</foreach>
on conflict(a,b) do nothing
</insert>
推薦下面:
<insert id="insertOrUpdateNew">
insert into test
(a,b,c)
values
(#{a},#{b},#{c})
on conflict(a,b) do update set c = excluded.c
</insert>
注:1、PostgreSQL單條插入更新的時候三種寫法都可以用,但是!!!批量插入更新的時候只能用第三種寫法!!!
2、PostgreSQL的conflict語法只在PostgreSQL-9.5以上纔可生效,9.5以下版本直接報錯。