PostgreSQL(MySQL)插入操作遇到唯一值重複時更新

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以下版本直接報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章