1. 程式人生 > >MySQL insertOrUpdate 存在時更新,不存在時插入

MySQL insertOrUpdate 存在時更新,不存在時插入

前提:判斷更新或者插入的條件是 表裡的唯一索引是否衝突,比如插入主鍵值相同的資料。

如需要根據某個鍵值來判斷,必須建立唯一索引。

方式:使用 ON DUPLICATE KEY UPDATE 命令

Mybatis

<insert id="insertOrUpdate" parameterType="java.util.List" useGeneratedKeys="true"
            keyProperty="id">
        insert into user_agree_protocol(
        id,
        user_id,
        protocol_id,
        protocol_version
        )
        values
        <foreach collection="list" item="item" index="index"
                 separator=",">
        ( #{item.id},
          #{item.userId},
          #{item.protocolId},
          #{item.protocolVersion})
        </foreach>
        ON DUPLICATE KEY UPDATE
            protocol_version = VALUES (protocol_version)
</insert>

SQL語句的寫法和MyBatis寫法差不多,就不單獨給出了。這裡用VALUES就可以直接拿到原本要插入但插入失敗的值。