INSERT-OR-UPDATE

需求

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

实现方式

在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)