美文网首页
INSERT-OR-UPDATE

INSERT-OR-UPDATE

作者: Daved | 来源:发表于2018-01-25 21:48 被阅读178次

    需求

    我们对一条记录进行记录进行操作时,如果该条记录存在则更新,如果不存在则执行插入操作。

    实现方式

    在MySQL中可以通过以下形式的SQL语句来操作。假设at1表中的唯一索引并且在t1表中存在a的值为1的记录,则以下两条语句效果相同。

    INSERT INTO t1 (a,b,c) VALUES (1,2,3)
    ON DUPLICATE KEY UPDATE c=c+1;
    
    UPDATE t1 SET c=c+1 WHERE a=1;
    

    局限性

    1. 以上语句会在插入时对唯一索引进行判断,如果插入数据唯一索引字段值在库中存在,则执行更新操作,如果唯一索引字段值在库中不存在则执行插入操作。(唯一索引可以是主键或其他形式的联合唯一索引)
    2. 上述语句中不能使用WHERE语句

    满足特定条件时执行UPDATE

    虽然不能使用WHERE条件,我们可以通过另外一种变通的方式来达到使用WHERE语句的效果-IF函数,使用方式如下。

    INSERT INTO daily_events
      (created_on, last_event_id, last_event_created_at)
    VALUES
      ('2010-01-19', 23, '2010-01-19 10:23:11')
    ON DUPLICATE KEY UPDATE
      last_event_id = IF('condition'), VALUES(last_event_id), last_event_id),
      last_event_created_at = IF('condition'), VALUES(last_event_created_at), last_event_created_at);
    

    简要说明:执行UPDATE操作时如果IF条件满足,则使用VALUES(last_event_id)获取传入的值,否则继续使用原来的值,不做UPDATE操作

    参考

    insert-on-duplicate

    conditional-duplicate-key-updates-with-mysql

    相关文章

      网友评论

          本文标题:INSERT-OR-UPDATE

          本文链接:https://www.haomeiwen.com/subject/gaubaxtx.html