MySQL - UPDATE ...在DUPLICATE KEY MERGE上

时间:2016-07-15 12:50:14

标签: mysql sql

我正在寻找一种很好的方式(不做两次查询并让自己处理需要处理的竞争条件等)来执行UPDATE ... ON DUPLICATE KEY MERGE

之类的查询

说我有这样一张桌子:

p_key    field1     field2     field3     field4
------------------------------------------------
1        1          1          4          burger
2        1          2          5          beer

p_key是主键,并且field 1, field 2上有唯一索引。

如果我那时运行如下的查询:

UPDATE `table`
SET field2 = 1
WHERE p_key = 2

我会收到重复的密钥错误。我希望能够编写一个类似

的查询
UPDATE `table`
SET field2 = 1
WHERE p_key = 2
ON DUPLICATE KEY MERGE
field3 = SUM(field3),
field4 = 'beer'

这会导致表格现在看起来像:

p_key    field1     field2     field3     field4
------------------------------------------------
1        1          1          9          beer

或者p_key 2也可以接受(我不介意删除哪一行)。

我希望这有道理吗?我意识到MySQL中没有ON DUPLICATE KEY MERGE这样的东西,但是如何在MySQL中实现这个结果?

谢谢!

编辑:如果有帮助,这是测试表的代码:

CREATE TABLE `table` (
  `p_key` int(11) NOT NULL,
  `field1` int(11) NOT NULL,
  `field2` int(11) NOT NULL,
  `field3` int(11) NOT NULL,
  `field4` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `table` (`p_key`, `field1`, `field2`, `field3`, `field4`) VALUES
(1, 1, 1, 4, 'burger'),
(2, 1, 2, 5, 'beer');

ALTER TABLE `table`
  ADD PRIMARY KEY (`p_key`),
  ADD UNIQUE KEY `field1` (`field1`,`field2`);

1 个答案:

答案 0 :(得分:0)

我想你想要这个:

INSERT INTO table(p_key, field2)
    VALUES (2, 1)
    ON DUPLICATE KEY
        field3 = field3 + VALUES(field3),
        field4 = 'beer';

我应该注意,这假设field3的默认值为0.否则,该值始终为NULL。或者,您可以这样做:

INSERT INTO table(p_key, field2)
    VALUES (2, 1)
    ON DUPLICATE KEY
        field3 = COALESCE(field3, 0) + VALUES(field3),
        field4 = 'beer';