ON DUPLICATE KEY UPDATE 附带更新条件

ON DUPLICATE KEY UPDATE 附带更新条件ONDUPLICATEKEYUPDATE 1、根据表索引唯一性,如果在insert时冲突则改为update;实际场景使用中update时可能会需要一定的条件限制,但ONDUPLICATEKEYUPDATE不支持使用where关键字,可用IF关键字,使用方法如下:      INSERTINTOrf_phase_flow(    customer_

ON

ON DUPLICATE KEY UPDATE 

1、根据表索引唯一性,如果在insert时冲突则改为update;实际场景使用中update时可能会需要一定的条件限制,但ON DUPLICATE KEY UPDATE不支持使用where关键字,可用IF关键字,使用方法如下:

 <insert id="checkInOrUpdate">
        INSERT INTO rf_phase_flow(
        customer_jdpin,
        phase,
        status,
        sub_phase,
        sub_status,
        created_date,
        modified_date
        ) VALUES (
        #{customerJdpin},
        #{phase},
        #{status},
        #{subPhase},
        #{subStatus},
        now(),
        now()
        ) ON DUPLICATE KEY UPDATE
        sub_phase = IF(status = 'PROC', #{subPhase} , sub_phase),
        sub_status = IF(status = 'PROC', #{subStatus} , sub_status),
        modified_date = IF(status = 'PROC', now() , modified_date),
        status = IF(status = 'PROC', #{status} , status)
    </insert>

  

注意:对于update的条件,如上为status=’PROC’,如果在update时会更新该值,需要将该值置为最后一个更新;

在sql执行时会首先更新了这个字段之后再执行之后的语句,这会导致永远只更新这个字段,后面的字段再检查条件时已经不满足了;

2、一般场景下ON DUPLICATE KEY UPDATE使用场景为:

  

 <insert id="saveOrUpdate">
        INSERT INTO rf_phase_flow(
        customer_jdpin,
        phase,
        status,
        created_date,
        modified_date
        ) VALUES (
        #{customerJdpin},
        #{phase},
        #{status},
        now(),
        now()
        ) ON DUPLICATE KEY UPDATE
        <if test="status != null">status = #{status},</if>
        modified_date = now()
    </insert>

3、ON DUPLICATE KEY UPDATE中关于自增id不连续

http://blog.csdn.net/zhanh1218/article/details/21459297

今天的文章ON DUPLICATE KEY UPDATE 附带更新条件分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33069.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注